2016-04-25 3 views
0

私はSchemeを使って実装を説明する記事を読んでいます。私はコモン・リプスを少しは知っていますが、スキームはありません。2つのスキームコードサンプルとそれに相当するCommon Lispでの表現

2つのSchemeコードのサンプルを説明し、それらがCommon Lispにどのように対応しているかをお見せしたいと思います。

まず、このスキームはどういう意味:

(define (content cell) 
    (cell ’content)) 

を私はそれがこのことを意味信じる:cellという名前の引数を持つcontentという名前の関数を定義します。 Common Lispでは、以下のように書かれています:

(defun content (cell) 
    (...)) 

私はこれまでのところですか?

機能の身体が何をしているのか不明です。引数(cell)は実際に関数であり、本体は関数を呼び出しています。シンボルは現在の関数の名前になりますか?これは、対応するCommon Lispのである:ここで

(defun content (cell) 
    (funcall cell ’content)) 

は、第2の方式のコードサンプルです:

(define nothing #(*the-nothing*)) 

私はそれがグローバル変数を作成し、#(*the-number*))にそれを初期化していると信じています。ですから対応するCommon Lispは:

(defvar nothing #(*the-nothing*)) 

そうですか?ポンド記号(#)には特別な意味がありますか?私は*the-nothing*がグローバル変数を参照していると思います、はい?

答えて

1

大まかに言って、両方に賛成で、1つの大きな注意点があります。具体的には、最初のものはcellという引数を受け取り、それをシンボル 'content'と呼んでいます。 (ちょっとあなたのユニコードの引用符が私をちょっと驚かせています。コピーペーストの問題ですか?)

2番目のケースでは、ハッシュはベクトルを定義するためのショートカットです。したがって、たとえば:

(vector? #(abc)) ;; evaluates to #t 

ただし、ハッシュにも引用動作があります。ちょうど

'(a b c) 

の最初の要素としてではなく、シンボル'*the-nothing*シンボル'a(なくaという名前の変数の値)、ベクトル

#(*the-nothing*) 

の最初の値でありますグローバル変数の値より大きい。

+0

ありがとうジョン。引用符であなたを変えてしまって申し訳ありません。はい、コピー&ペーストです。 –

関連する問題