Presentation is loading. Please wait.

Presentation is loading. Please wait.

ISD実習E 2009年7月13日 LISPシステム入門 (第6回) 関数の定義 eval load 関数.

Similar presentations


Presentation on theme: "ISD実習E 2009年7月13日 LISPシステム入門 (第6回) 関数の定義 eval load 関数."— Presentation transcript:

1 ISD実習E 2009年7月13日 LISPシステム入門 (第6回) 関数の定義 eval load 関数

2 eval関数(V1.0) ユーザによる関数定義ができる。 lamda.cを追加 関数evalは、eval_lambdaを呼び出す。
sp_defineは 関数定義に対応するように変更した。 if文のためにsp_ifを追加。 判定のための関数 = とeq? を追加。

3 関数の定義 sp_define は、第一引数がリストのとき sp_define_func (lambda.cにある)を 呼び出す。
(define (fact n) (if (= n 0) 1 (* n (fact (- n 1))) ) sp_define は、第一引数がリストのとき sp_define_func (lambda.cにある)を 呼び出す。

4 load関数 ファイルに書かれた、Lispの式をシステムに 読み込んで、それらをevalするのが loadである。 (load 'fact)
で確認。load.cを見よ. 注。 ファイル名に拡張子をつけてはいけない。

5 関数定義の練習 以下の動作をする関数をdefineせよ。 (positive? 3) -> #t
(square 5) -> (first '( x y z)) -> x (second '(x y z)) -> y (nsum 10) -> 55 これは、10 から1までの和

6 関数定義の練習2 (null? () ) -> #t 他は、#f を返す。
(memq 'x '(h x y)) -> (x y) 見つからないときは#fを返す。 (remq 'x '(h x y x g)) -> '(h y g) (append '(x y ) '(2 3)) -> (x y 2 3)

7 課題 V1.0に、機能の追加をする。 たとえば、 実数型を追加する。 文字列型を追加する。 システム関数を増やす。
gbc(ごみ集め)を作る。 while ループを作る。

8 提出先 sato@u.dendai.ac.jp に送る。 メールのタイトルは実習E 本文にも、実習Eを含めること。 7月27まで。
結果のファイル(zipまたはtgzに圧縮) と、何をやったかのレポートを に送る。 メールのタイトルは実習E 本文にも、実習Eを含めること。 7月27まで。


Download ppt "ISD実習E 2009年7月13日 LISPシステム入門 (第6回) 関数の定義 eval load 関数."

Similar presentations


Ads by Google