なんか色々やってみよう

アルゴリズム言語Schemeに関する第五改訂報告書
Practical Scheme
Scheme Programming
もうひとつの Scheme 入門
などを参考にしつつ適当に動かしてみよう。

まず適当に四則演算とかさせてみよう

gosh> (+ 32)
32
gosh> (+ 223 27)
250
gosh> (- 10 6)
4
gosh> (- 10 6 3)
1
gosh> (* 3 2)
6
gosh> (/ 324 108)
3
gosh> (/ 1 3)
0.3333333333333333
gosh> (+ (* 3 2) (- 6 3))
9

SchemeLisp系の言語ですから、前置記法(演算子を最初に、うしろに引数を書く)ですね。(+ (* 3 2) (- 6 3))は入れ子になってますが、6を返す(* 3 2)と3を返す(- 6 3)を足してるんだから9になりますね。

四則演算以外の計算も

gosh> (quotient 7 3) ; 商を求めます
2
gosh> (modulo 7 3) ; 余りを求めます
1
gosh> (sqrt 9) ; 平方ですね。
3.0
gosh> (sqrt 2)
1.4142135623730951
gosh> (sin 0) ; 三角関数sin
0.0
gosh> (sin (/ 3.141592 2)) ; 単位はもちろんラジアンですよ
0.9999999999999466
gosh> (cos 3.141592)
-0.9999999999997864
gosh> (asin 1) ; アークサイン(sinの逆関数)
1.5707963267948966
gosh> (cos (* 2 (asin 1)))
-1.0
gosh> (log 1)
0.0
gosh> (log 2.7)
0.9932517730102834

;以降はコメントとして扱われます。

λ(lambda)で関数定義してみよう

gosh> (define fact (lambda (n) (if (= n 0) 1 (* n (fact (- n 1))))))
fact
gosh> (fact 3)
6
gosh> (fact 4)
24
gosh> (+ (fact 3) 2)
8

なんかlambda式で階乗関数factが定義できましたよ、と。

そういえばまだ"Hello World!"してなかった。

gosh> (display "Hello World!")
Hello World!#<undef>

はい副作用副作用。

test