Scheme

Schemeの評価と遅延評価

※ 以下はScheme初心者である私の勉強用のメモです。 間違っている可能性がありますので注意してください。評価と値 評価(evaluate)とは式を実行し、その結果である"値"を返すことである。では、そもそも"値"とはなんだろう? 値とは、"これ以上変形できない計…

Schemeで高階関数を書く

高階関数 高階関数とは、引数に関数を指定したり、戻り値として関数を返す関数である。代表的な組み込み高階関数にはmap, filter, foldがある。map リストの要素それぞれに同じ関数を適用するにはmap式を使用する。一般形 (map 関数 リスト) map式のイメージ…

Schemeでlambda式を書く

lambda式を使用することで、無名関数を作成することができる。一般形 (lambda (引数1 引数2 ・・・ 引数n) (式)) 例 > (lambda (x) (* x x)) ;xの2乗を返す無名関数 #<procedure> lambda式の基本的な呼出し 関数を呼び出す場合、通常はその関数名を指定することで呼び</procedure>…

Schemeでリストを使用する

※ 以下はScheme初心者である私の勉強用のメモです。 間違っている可能性がありますので注意してください。リスト 最後が空リストで終わっているペアをリストという。例 > (cons 1 (cons 2 (cons 3 ()))) リストを生成する リストはlist式を使用することで簡…

Schemeでペアを使用する

※ 以下はScheme初心者である私の勉強用のメモです。 間違っている可能性がありますので注意してください。 ペア ペアとは2つ要素(element)を持つ構造体である。 Schemeにおけるペアのルール 2つの要素はそれぞれcar部とcdr部として区別される 異種のデータを…

Schemeで再帰を行う

※ 以下はScheme初心者である私の勉強用のメモです。 間違っている可能性がありますので注意してください。 再帰呼び出し 再帰呼び出しとは、関数が自分自身を呼び出すことである。Schemeでは、ループ処理を再帰を利用して実装することが多いようである。 通…

Schemeで繰り返しを行う

※ 以下はScheme初心者である私の勉強用のメモです。 間違っている可能性がありますので注意してください。 do式 do式を使用することで繰り返しを行うことができる。ただし、Schemeでは繰り返しを再帰を使って書くのが一般的なようである。 一般形 (do ((変数…

Schemeで値の代入を行う

※ 以下はScheme初心者である私の勉強用のメモです。 間違っている可能性がありますので注意してください。 値の代入を行う set!式を使用することで、変数へ値の代入を行うことができる。 ただし、Schemeプログラマは不必要な値の代入を嫌う傾向にあるようで…

Schemeで演算を行う

※ 以下はScheme初心者である私の勉強用のメモです。間違っている可能性がありますので注意してください。Schemeの演算は前置記法(ポーランド記法)で記述する。 例 1 + 2 ==> (+ 1 2) 1 + 2 + 3 ==> (+ 1 (+ 2 3)) なお、前置記法は任意個の引数の指定が可能…

Schemeで述語を書く

※ 以下はScheme初心者である私の勉強用のメモです。間違っている可能性がありますので注意してください。条件の真偽を決定するために使用される関数を述語(predicate)という。 以下に述語の一覧を示す。オブジェクトの比較を行う関数 関数意味 eqv?同じオブ…

Schemeで多分岐を行う

※ 以下はScheme初心者である私の勉強用のメモです。 間違っている可能性がありますので注意してください。 多分岐 (cond, case) 多分岐を行う関数にはcond式とcase式がある。 cond式 if式のように条件を指定して多分岐を行うにはcond式を使用する。 一般形 (…

Schemeで分岐を行う

※ 以下はScheme初心者である私の勉強用のメモです。 間違っている可能性がありますので注意してください。 分岐 (if) 分岐を行うにはif式を使用する 一般形 (if 条件式 真の場合の式 偽の場合の式) 例1 ; 大人か小人かを判定する (define (if-test1 age) (if…

Schemeで変数を定義する

※ 以下はScheme初心者である私の勉強用のメモです。 間違っている可能性がありますので注意してください。 変数 変数を定義するにはlet式を使用する。 一般形 (let ((変数名1 初期値1) (変数名2 初期値2) (・・・ ・・・) (変数名n 初期値n)) 式・・・) 注意…

Schemeで関数を定義する

※ 以下はScheme初心者である私の勉強用のメモです。 間違っている可能性がありますので注意してください。 関数 関数を定義するにはdefine式を使用する。 一般形 (define (関数名 引数1, 引数2, ・・・) 式・・・・) 例1 ; 与えられた仮引数の値の2乗を返す …