トップ «前の日記(2013-11-26(Tue)) 最新 次の日記(2013-12-01(Sun))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2013-11-30(Sat) 晴れて風が強く、寒い

haskell 初歩。四則演算など。

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

mathematica で代数

polynomial

とりあえずは多項式。
なんか順番が教科書と逆っぽいが。

GHC は、コンパイラである。

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に縮まった。

Raspbian には ghci がない

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に少し嵌った

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

返す値は同じ型でないとダメかもしれない。
ということで最後に数値の文字列変換を。

GHCI上での関数定義

Prelude> let addOne x = x + 1
Prelude> addOne 10
11

mathematica でy=xとか、y=1/x とか

y=x,etc

うまく表示できるか。

「今日」はここまで。

以上、空白。


リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。