10章(The Little Schemer, 4th Edition)では、defineのない小さなLisp処理系を作りました。
20章(The Seasoned Schemer)ではdefineのある小さなLisp処理系を作るようです。そこでリストの先頭が(quote define)であるかどうかを判定するdefine?という手続きを作るわけです。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(define (define? e) | |
(cond | |
((atom? e) #f) | |
((atom? (car e)) | |
(eq? (car e)(quote define))) | |
(else #f))) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(define (define? e) | |
(let ((kar (if (atom? e) | |
#f | |
(car e)))) | |
(eq? kar 'define))) | |
(define (define? e) | |
(eq? (if (pair? e) | |
(car e) | |
#f) 'define)) | |
(define (define? e) | |
(eq? (and (pair? e) | |
(car e)) 'define)) |
書いてはみるものの、微妙です。微妙なので取り合えずブログに書いとけ、と思うわけです。ただそれだけです。
追記
そうでしたよ。Common Lispなら、こんなどうでも良いこと気にもならんのですよね。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defun define-p (e) | |
(if (consp e) | |
(eq (car e) 'define))) | |
0 件のコメント:
コメントを投稿