問題タブ [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.
function - defmethod ステートメントの eql 句を展開して、任意の関数を受け入れますか?
defmethod
数日前、引数指定構文の eql 句について知りました。defmethod ハイパースペックeql
は、トークンの存在が構文の基本的な部分であることを明確にしています。たとえば、CLISP で次のことを試みると、エラーが発生します。
(<
これは数値でしか機能しないため、ここでは悪い例ですが、私の主張を理解していただければ幸いです)
eql
なぜこの構文で唯一の関数が許可されているのかについて、私は混乱していました (そして今でも混乱しています) 。
eql
句のこの制限を回避しdefmethod
、その引数に対して任意の関数を強制的にテストする方法はありますか? Haskell のガードに似た機能を探しています。たとえば、上記の例 (機能する場合) は次のように動作する必要があります。
lisp - Lisp Def メソッドの構造
update
上記の方法は本から来たもので、との違いは何かを知りたいと思いました:before
。CLOS Lisp でメソッドを定義した私の理解でupdate
は、 はメソッドの名前ですが、何をするの:before
でしょうか?
最後に、最後の行は何をしますか?(format T ":BEFORE completed for agent ̃A and event ̃A ̃%" a e))
lisp - 異なるパラメーター リストを持つ CLOS マルチメソッドの「オーバーロード」
Common Lisp でマルチメソッドの「オーバーロード呼び出し」を行おうとしています。ケースの簡単な概要は次のとおりです。
出力:i pity the foo defnoodle, who has a bar Chocolate
しかし、次のメソッドを定義しようとするとすぐに:
CLは怒る:
ここで私が間違っていることを誰かが知っていますか? クラスごと、任意の数の引数ごとにn個のinitialize-instanceメソッドを識別できるはずなので、initialize-instanceにも同様の柔軟性があることを私は知っています。
しかし、これを上記のバニラの例にどのように翻訳できるかは明確ではありません。そして、これは MOP の一部であるため、間違ったツリーを吠えている可能性があるように感じます。
lisp - Lisp clos アクセサの問題
クラスがリストにある場合、clos アクセサー関数を使用できません。
クラスaがあるとします:
そして、私は2つのインスタンスを作成します:
そして、リスト内にある間に各インスタンスの値を取得する関数を作成したい場合は、
そしてそれを呼び出す
しかし、私はエラーが発生します:
また、mapcar でアクセサーを直接呼び出す代わりに、アクセサーを含む関数を呼び出した場合にも発生します。また、マップカーの代わりにループなどを使ってみました。
ありがとう
macros - カスタム マクロでの一般的な Lisp defclass make-instance の使用法
新しいクラスを作成するマクロを定義してから、新しく定義されたクラスのインスタンスを作成する定数を定義しました。
これはREPLで機能するようです
しかし、ファイルでコンパイルするとうまくいきません:
class - List : パッケージ内のすべての CLOS クラスを一覧表示します
パッケージで定義されているすべてのクラスをリストすることは可能だと確信していますが、その方法がわかりません。
誰も答えを持っていますか?
ありがとう、
lisp - CLOS スロット アクセサー: 読み取り可能ですが、書き込み不可
CLOS オブジェクトのスロットの名前のリストがあります。
これらのスロットの値を読み取ることができます。
==> NIL
しかし、これらのスロットに新しい値を書き込めないのはなぜですか? 私のトライアルデータのクラス定義は、スロットごとにアクセサ関数を作成すべきではありませんか?
==>
lisp - CLOS スロットのバインドを解除できるのはなぜですか?
Common Lisp の特別な変数だけがアンバインドできると言われています。すべてのレキシカル変数のデフォルト値はnil
. クラススロットはクロージャーのようなものに存在すると思っていましたが、明らかに存在しません。
パラメータなしで CLOS スロットを定義し:initform
(いずれにせよバインドされることを期待してnil
)、インスタンスの作成時に値を指定しないと、バインドされていないスロットを持つインスタンスが取得されます。なぜそうなのですか?便利ではありません。