2016-04-06 6 views
0

私はシンプルなスキーマ通訳を実装している本書の第10章「小さなスキーマ - 第4版」を読んでいます。私はこの行については明らかではないよラムダは本の中のアトム「小さなスキマー」ですか?

(define :atom? 
    (lambda (x) 
    (cond 
     ((atom? x) #t) 
     ((null? x) #f) 
     ((eq? (car x) (quote primitive)) #t) 
     ((eq? (car x) (quote non-primitive) #t) 
     (else #f))))) 

((eq? (car x) (quote non-primitive) #t) 

ブックの以前から、non-primitiveがある他のすべてのコンテンツは、ページ188内の関数:atom?除いて、私には大丈夫ですラムダ定義に対応する。

(lambda (x) (+ x 1)) 

は(渡す環境table付き)の値を持っています

(non-primitive (table (x) (+ x 1))) 

これは、ラムダの定義は本の中で、​​であることを意味していますか?

私はこの本で言及された関係を見つけることができないので、それは確かではないと思います。

答えて

1

ソースコード(lambda (x) (+ x 1))はアトムではありませんが、結果としてクロージャになる評価値は、評価者によってアトムとして識別される必要があります。

リスプでは、リストではないものはすべてアトムです。あなたはこのようにそれを定義することができます。

(define atom? 
    (lambda (x) 
    (not (or (null? x) 
      (pair? x))))) 

あなたはそれらも評価さ原子などを確認する必要がありますそのように識別タグとして最初の要素でpairsとしてあなたクロージャをモデル化し、それがあなたの:atom?を見ることで何をするかだ場合primitiveおよびnon-primitive

関連する問題