28

mit-schemeのnull値表現とは何か教えてもらえますか?SICPブックでは、「nil」である必要がありますが、機能しません。ありがとう。

4

4 に答える 4

26

'()動作するはずです。基本的に、スキームのnilは空のリストであるため、空のリストを引用するとnilになります。

于 2012-02-02T16:17:52.380 に答える
12

歴史があります。http://web.archive.org/web/20070808004043/http://wiki.wordaligned.org/sicp/published/FrequentlyAskedQuestionsにアクセスします

オリジナル(壊れた):http ://wiki.wordaligned.org/sicp/published/FrequentlyAskedQuestions


上記のFAQからのテキスト(インターネットアーカイブが破損した場合):

「nil」が機能しないのはなぜですか?

簡単な答えは次のとおりです。nilはSchemeの一部ではなくなり、'()代わりに使用してください。長い答えは次のとおりです…</p>

第2章の初期の例ではnil、リストターミネータとして使用されていますが、これらの例を(たとえば)MITスキームを使用して実行すると、次のようになります。

;Unbound variable: nil

同様に、()またはnullの代わりに使用nilすることは、一部の実装で機能する可能性がありますが、どちらも移植性がありません。ウィザードブックは、この脚注の問題に対処しています

Lisp方言の標準化におけるどれほどのエネルギーが、文字通り何もない議論に散逸していることは注目に値します。nilは普通の名前である必要がありますか?nilの値はシンボルである必要がありますか?それはリストであるべきですか?ペアにする必要がありますか?スキームでは、nilは通常の名前であり、このセクションでは、値がリストの終わりマーカーである変数として使用します(trueがtrue値を持つ通常の変数であるのと同じです)。Common Lispを含むLispの他の方言は、nilを特別な記号として扱います。あまりにも多くの言語標準化の乱闘に耐えてきたこの本の著者は、問題全体を避けたいと思っています。セクション2.3で引用符を導入したら、空のリストを'()と表記し、変数nilを完全に省略します。

これが書かれて以来、nilはScheme標準から削除されましたが、結論は次のようになります。nilではなく'()を使用します。accu-sicpリストへの電子メールで、マイクは次のように述べています。

これは厄介なことです、このnil / null /'()ビジネス。Scheme48とscmはnullを定義せず、guileはそれを定義しますが、一般的なlispのnullに似たプロシージャとして(clのnilのように動作するnilを使用するため、それ自体は'()とは異なります。これはおそらくこれと関係があります。 guileでemacsをやり直すfsfの計画)。最善の策は、作者によるnilの使用を'()に置き換えることだと思います。

[マークダウンと通常のASCII入力を問題の言語/実装にさらに一致させるために、わずかな誤植のクリーンアップでコピーされました。]

于 2012-03-20T11:51:20.120 に答える
1

私は使用しMIT/GNU Scheme microcode 15.3、すべての作品。(あなたが言ったように、そして動作しません)。()'()nilnull

1 ]=> ()

;Value: ()

1 ]=> '()

;Value: ()

1 ]=> (cons 1 ())

;Value 2: (1)

1 ]=> (cons 1 '())

;Value 3: (1)
于 2014-10-11T15:33:22.070 に答える
0

(list)'()および()はnullを表すことができます。例えば、

(define (transpose mat) (accumulate-n cons () mat))

または、()を'()または(list)に置き換えます。

于 2014-04-01T18:26:23.817 に答える