僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
Prelude> 10 + 3 13 Prelude> 10 - 3 7 Prelude> 10 * 3 30 Prelude> 10 / 3 3.3333333333333335
"/"は浮動小数点演算か。
整数演算は "div"、剰余は "mod"。この場合
演算子は前置記法になる。
Prelude> div 10 3 3 Prelude> mod 10 3 1
中置記法は"`div`"のようにする。
Prelude> 10 `div` 3 3 Prelude> 10 `mod` 3 1
"==" の反対は"/="。
Prelude> 3 == 4 False Prelude> True /= False True Prelude> 3 >= 3 True Prelude> 3 >= 4 False
Ubuntu-12.04LTS x86_64 にて。
$ ghc --version The Glorious Glasgow Haskell Compilation System, version 7.4.1 $ cat helloworld.hs main = putStrLn "hello, world" $ ghc --make helloworld Linking helloworld ... $ ./helloworld hello, world
なんかでかいの(約1.1MB)ができたらしい。
$ ls -alF helloworld -rwxrwxr-x 1 user group 1050868 11月 30 01:47 helloworld $ ldd helloworld linux-vdso.so.1 => (0x00007fff6a670000) libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007f7df778c000) libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007f7df7584000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7df7287000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f7df707f000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7df6e7b000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7df6aba000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7df689d000) /lib64/ld-linux-x86-64.so.2 (0x00007f7df7a1c000)
strip してやっても、723KB あった。
ちなみにGCC-4.6.3によるhello, world は、
$ ls -l helloworld_c -rwxrwxr-x 1 user group 8382 11月 29 23:29 helloworld_c $ ldd helloworld_c linux-vdso.so.1 => (0x00007fffb7fff000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f704a58c000) /lib64/ld-linux-x86-64.so.2 (0x00007f704a96e000)
こちらはstripしてやると、6.1KBに縮まった。
ARMのGHCサポートは、 Tier 2らしい。
$ time ghc --make helloworld [1 of 1] Compiling Main ( helloworld.hs, helloworld.o ) Linking helloworld ... real 0m20.885s user 0m6.340s sys 0m1.510s
ldd は省略。
$ ls -alF helloworld -h -rwxr-xr-x 1 user group 8.9M 11月 30 02:08 helloworld* $ strip helloworld $ ls -alF helloworld -h -rwxr-xr-x 1 user group 3.8M 11月 30 02:09 helloworld*
GCCでは5.1KBだった。strip 後で2.9KB。
fizzBuzz x =
if x `mod` 15 == 0 then "fizzbuzz"
else if x `mod` 5 == 0 then "buzz"
else if x `mod` 3 == 0 then "fizz"
else show x
返す値は同じ型でないとダメかもしれない。
ということで最後に数値の文字列変換を。
Prelude> let addOne x = x + 1 Prelude> addOne 10 11
以上、空白。
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。