問題タブ [on-lisp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1124 参照

macros - OnLispからSchemeでマクロを学ぶ

私は本当にSchemeマクロを学びたいです。「OnLisp」の内容を一瞥したところ、多くの章がLispマクロに専念してきました。しかし、私は一般的なlispを知りません。これを使用してSchemeマクロを学習できますか?

0 投票する
3 に答える
521 参照

lisp - 奇妙な Lisp 引用シナリオ - Graham's On Lisp、37 ページ

Graham の本「On Lisp」を読んでいるのですが、37 ページにある次の例を理解できません。

誰かがここで何が起こっているのか理解していますか? これは、引用が何をするかについての私のメンタルモデルをひどく台無しにしています.

0 投票する
1 に答える
279 参照

lisp - On Lisp の奇妙な引用リストの例

からのこの一節On Lispは本当に紛らわしいです - などの引用符で囲まれたリストを返すと、実際に関数が将来'(oh my)どのように動作するかを実際に変更する方法が明確ではありません: 返されたリストは関数でゼロから再度生成されますか?呼ばれた?

戻り値に引用符付きリストが組み込まれるように exclaim を定義すると、

その後、戻り値の破壊的な変更

関数内のリストを変更できます。

このような問題に対する明確な証拠を作成するには、次のように記述します。

exclaim結果に単語を追加するための最後の呼び出しはどのくらい正確goodnessですか? 関数は外部変数を参照していないので、関数の動作をnconc実際に変更するための別の呼び出しはどのように行われたのでしょうか?exclaim

0 投票する
1 に答える
1050 参照

lisp - Common Lisp でのマクロによる継続 -- OnLisp での実装について

On Lisp では、p. 267 で、Paul Graham は、マクロを渡す継続の実装を提供します。

t2次のコードでは、 treeの各リーフのツリーをトラバースし、この実装を使用しています。特に、 のリーフが(最初の要素) から(2 番目の要素) に変更された後、 が呼び出されt1たときに何が起こるのか疑問に思っています。が呼び出されると、単純に からラムダ関数がポップされ、そのラムダ関数が再度呼び出されます。しかし、この呼び出しは最も外側の のスコープ外で行われ、バインディングを担当していました。では、アウターによって導入されたバインディングはどのようにスコープ内にあるのでしょうか?restartt1ABrestart*saved*dft-node(cdr tree)=bind=bind*cont**cont*=bind

最後の形式は次のように展開されます

これにより、 が生成され(a 1)ます。Graham によると、以降の への呼び出しはなどをまでrestart生成し、その後の呼び出しでは、 などを 最終的に まで生成する必要があります。(a 2)(a 5)(b 1)(b 2)(g 5)

の後、確立され(a 1)た のバインディングはもはや適切ではありません。これらの値への後続の呼び出しはどのように行われますか? のスコープは、への別の呼び出しにまだ適用されていますか? ここで何が起こっているのですか?*cont*letrestartletrestart

0 投票する
1 に答える
610 参照

tree - これは本当に幅優先検索ですか

OnLisp の P.303 に幅優先探索の疑似コードがありますので、以下に示します。以下のグラフでは、最初にノード 1 を処理し、次にノード 2、3、および 4 をキューに入れ、繰り返し自分自身を再度呼び出します。次に、キューの先頭にあるノード 4 に進みます。これにより、ノード 7 と 8 がキューの先頭に配置されます。

最後に、それが通過したパスは、深さ優先検索である 1->4->7-11->12->8->3->2->5->9->10->6 になります。私はここで間違っていますか?

ここに画像の説明を入力