さてはじめますか。
[問題1.1]「q1.1.txt」をダウンロード
単純にREPLにテキストを打ち込んで結果を見た。
・数値はそのまま表示
・式は前置記法([操作 引数セット]の順番。よく考えれば関数といっしょ)
打ち込んでリターンすれば演算結果が返る。
・積和演算とかは入れ子で表記。
・defineで定義するだけではREPLから返答はない。(DrSchemeだから?)
いちど定義を書けばそれ以降継続して使える。
・条件式も書けるが演算と見間違えて困る(これは当方の問題^^;)
・ifやcondどうしても括弧満載の式になるのでどうにも読みにくい。
エディタに自動インデントと括弧の範囲表示機能がないとSchemeいじりが
おっくうになるのもわかる。
(というかScheme/Lisp処理系は専用エディタとセットメニューが必須だと思う。)
[問題1.2]「q1.2.txt」をダウンロード
REPLにテキストを打ち込んで結果を見た。
・検算するとうまくいっているようなので、よしとしよう^^;;;
・分数表記できるのが「人として」はうれしいところ。
逆に少数ほしいときは厄介?
[問題1.3]「q1.3.txt」をダウンロード
DrSchemeの定義ウィンドウをはじめて使う。
・定義ウィンドウに定義式を書くとREPLで呼び出して使えるらしい。
・defineはC言語のように1つずつ並べて書いてもよいけど、Schemeらしさを味わう
ためにdefine内部でdefineを書いてみた。
・構成は
1.「2乗の和」の定義を書いて
2.「一方が他方より大きいまたは等しいか?」の定義を書いて
3.condを使って引数の大小を判定し、これに応じて計算方法を決める。
といった感じで
・引数名の衝突を避けるためにdefine内部の関数引数はdefineで使った引数と違う
文字を使ったが、同じでもOKらしい。(ぶつからないのねん。)
「q1.3_v2.txt」をダウンロード
[問題1.4]「q1.4.txt」をダウンロード
「演算式が合成式である組合せ」とは何ぞや?
(+ 1 1)とかじゃなく((+ - * /) 5 6)みたいなイメージか?
とすると問題にある手続きは「引数の値によって演算方法を変える」ってところか?
絶対値計算とかに使えると便利だな。
[問題1.5]
ズルしてDrSchemeだのみ。
定義ウィンドウに式を打ち込んでREPLで実行。あり?返事がない・・・
というか暴走!?
・作用的順序評価は「引数を評価し作用させる」から(define (p) (p))の引数展開
の段で無限にp→p変換を行って暴走するのか。
・正規順序評価は「式を完全に展開し簡約する」からifの中身が
(if (= 0 0) 0 (p))となって、めでたく0が帰ってくる・・・わけか?
なるへそ。
最近のコメント