問題タブ [clos]

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 投票する
1 に答える
313 参照

function - defmethod ステートメントの eql 句を展開して、任意の関数を受け入れますか?

defmethod数日前、引数指定構文の eql 句について知りました。defmethod ハイパースペックeqlは、トークンの存在が構文の基本的な部分であることを明確にしています。たとえば、CLISP で次のことを試みると、エラーが発生します。

<これは数値でしか機能しないため、ここでは悪い例ですが、私の主張を理解していただければ幸いです)

eqlなぜこの構文で唯一の関数が許可されているのかについて、私は混乱していました (そして今でも混乱しています) 。

eql句のこの制限を回避しdefmethod、その引数に対して任意の関数を強制的にテストする方法はありますか? Haskell のガードに似た機能を探しています。たとえば、上記の例 (機能する場合) は次のように動作する必要があります。

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

lisp - Lisp Def メソッドの構造

update上記の方法は本から来たもので、との違いは何かを知りたいと思いました:before。CLOS Lisp でメソッドを定義した私の理解でupdateは、 はメソッドの名前ですが、何をするの:beforeでしょうか?

最後に、最後の行は何をしますか?(format T ":BEFORE completed for agent ̃A and event ̃A ̃%" a e))

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

lisp - 異なるパラメーター リストを持つ CLOS マルチメソッドの「オーバーロード」

Common Lisp でマルチメソッドの「オーバーロード呼び出し」を行おうとしています。ケースの簡単な概要は次のとおりです。

出力:i pity the foo defnoodle, who has a bar Chocolate

しかし、次のメソッドを定義しようとするとすぐに:

CLは怒る:

ここで私が間違っていることを誰かが知っていますか? クラスごと、任意の数の引数ごとにn個のinitialize-instanceメソッドを識別できるはずなので、initialize-instanceにも同様の柔軟性があることを私は知っています。

しかし、これを上記のバニラの例にどのように翻訳できるかは明確ではありません。そして、これは MOP の一部であるため、間違ったツリーを吠えている可能性があるように感じます。

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

lisp - Lisp clos アクセサの問題

クラスがリストにある場合、clos アクセサー関数を使用できません。

クラスaがあるとします:

そして、私は2つのインスタンスを作成します:

そして、リスト内にある間に各インスタンスの値を取得する関数を作成したい場合は、

そしてそれを呼び出す

しかし、私はエラーが発生します:

また、mapcar でアクセサーを直接呼び出す代わりに、アクセサーを含む関数を呼び出した場合にも発生します。また、マップカーの代わりにループなどを使ってみました。

ありがとう

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

macros - カスタム マクロでの一般的な Lisp defclass make-instance の使用法

新しいクラスを作成するマクロを定義してから、新しく定義されたクラスのインスタンスを作成する定数を定義しました。

これはREPLで機能するようです

しかし、ファイルでコンパイルするとうまくいきません:

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

class - List : パッケージ内のすべての CLOS クラスを一覧表示します

パッケージで定義されているすべてのクラスをリストすることは可能だと確信していますが、その方法がわかりません。

誰も答えを持っていますか?

ありがとう、

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

lisp - CLOS スロット アクセサー: 読み取り可能ですが、書き込み不可

CLOS オブジェクトのスロットの名前のリストがあります。

これらのスロットの値を読み取ることができます。

==> NIL

しかし、これらのスロットに新しい値を書き込めないのはなぜですか? 私のトライアルデータのクラス定義は、スロットごとにアクセサ関数を作成すべきではありませんか?

==>

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

lisp - CLOS スロットのバインドを解除できるのはなぜですか?

Common Lisp の特別な変数だけがアンバインドできると言われています。すべてのレキシカル変数のデフォルト値はnil. クラススロットはクロージャーのようなものに存在すると思っていましたが、明らかに存在しません。

パラメータなしで CLOS スロットを定義し:initform(いずれにせよバインドされることを期待してnil)、インスタンスの作成時に値を指定しないと、バインドされていないスロットを持つインスタンスが取得されます。なぜそうなのですか?便利ではありません。