2016-11-04 9 views
0

こんにちは私はスキームを学ぶためにしようとしていると私は大学のウェブサイトからの例に取り組んでいた:スキーム#=は出力の意味ですか?

(CIRCを定義「(:

https://courses.cs.washington.edu/courses/cse341/05au/lectures/scheme-side-effects.html

の例では、これらの線に沿って何かでありますAB))

(設定-CDRを!(CDR CIRC)CIRC)

、これはtです彼は出力:

=>#0 =(a b。 #0#)

この意味はわかりません。コードでは、2つの要素(a b)を持つリストとしてcircという変数が定義されています。

set-cdr! (b '())であるこのリストのcdrを変更し、それをcirc(a(b)である)に変更する。

私がここで期待していた出力は(a(a b))でしたが、代わりにこの変なハッシュタグのものがありました。

言語としてR5RS方式を設定したDrRacket IDEを使用しています。

このハッシュタグの内容は何を意味しますか?それはおそらく、それ自身のポインタ(a [circle to a pointer])のようなポインタを作成しているのでしょうか?その場合、それは何らかの無限ループまたは何かのようなものでしょうか?

私はこれを行う場合、私は意味:

(Xを定義する '(AB))

(!セット-CDR X' C)

X

= >(a。c);出力は

これはset-cdrとして理解しやすいです! (b '())を' C 'に置き換え、最後に'( ')を取り除くのは、リストの代わりに点線のペアを返す理由です。しかし、これは以前の例と一致していません。

とにかく誰かが私を埋めることができたら、教えてください。前もって感謝します。

答えて

4

操作が循環リストの作成であると考えると正しいです。

そのコンス・セルを介してリストを描画、これは後の状況を定義している:

enter image description here

を、これはset-cdr!後の状況です:

enter image description here

。なお、修正はcdrのcircのcdrにあります(2番目のセルのcdrも同様です)。lisp言語の表記#0=(a b . #0#)は、最後のcdrがリスト自体と等しい不適切なリストを記述し、循環データ構造(すなわち、「ループ」を有するデータ構造)を生成する。

+0

ありがとうございました。私は、この(および他の例)から、評価されているシンボルが文字列や数字のような印刷表現を持たないときにSchemeが出力するものが何かであるとも考えていると思います。 – PatentDeathSquad

+0

ahhこれは、リストの各要素が2つの値を持つコンスセルであることは一般的にはわかりませんでしたので、私が思った以上に役立っています。最初の値は実際の値で、2番目の値は次のコンスセルへのリンクです。私はそれがはっきりしていたはずですが、あなたが投稿したこれらの図面を見るだけで沈んだので、何が起こっているのか理解できなかったのです。したがって、リストの末尾は、車としての値を持つコンスセルであり、リンクの代わりに、nullまたは '()空リストのシンボルがcdrとしてあります。私はリストの各要素を単一の値として考えていました。再度、感謝します。 – PatentDeathSquad

関連する問題