Schemeを覚える2

http://www.shido.info/lisp/idx_scm.html
今日もこのサイトでSchemeを勉強。

繰り返しではまりちゅう。

分岐

(if 条件 結果が真の場合の処理 結果が偽の場合の処理)

入力した値が偶数だったら"even number"、奇数だったら"odd number"と表示する。

> (define (even-or-odd n)
    (if (= 0 (/ n 2))
        "even number"
        "odd number"))
> (even-or-odd 0)
"even number"
> (even-or-odd 1)
"odd number"

2つ目の引数で入力した文字が"square"だったら1つ目の数字を二乗し、そうでなければ2倍する。

> (define (calc n op)
    (if (equal? op "square")
        (* n n)
        (* n 2)))
> (calc 3 "")
6
> (calc 3 "square")
9

文字列の比較にはequal?関数を使う。

else ifがたくさんになったときはcondを使う

(cond
  (条件1 結果が真場合の処理)
  (条件2 結果が真場合の処理)
  (条件3 結果が真場合の処理)
  ・・・
  (else 上のどの条件にも当てはまらなかった場合の処理)

入力したデータが数字か文字列かリストかそれ以外か判断する関数

> (define (type t)
    (cond
      ((number? t) "number")
      ((string? t) "string")
      ((list? t)   "list")
      (else "other type")))
> (type 10)
"number"
> (type "hello")
"string"
> (type '(1 2 3))
"list"
> (type #\a)
"other type"

ちなみに、Schemeで文字(文字列ではなく)を表すときは#\の後にaやbという文字を書くことで表現する。