問題タブ [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.
lisp - Common Lisp のバインドされていない変数
初期化されていない変数を関数の引数として使用することはできますか? 課題のために、セマンティック ネットワーク システムを作成するために CLOS を使用する必要があり、教授は出力をテストするためのテスト関数を含めました。そのうちの 1 つが次のように指定しています。
(print (def-concept Human))
、
これは、引数 Human を関数 def-concept に渡すことを意味します。このテスト関数を実行すると、エラーから逃れることができません (Allegro CL で):
Error: Attempt to take the value of the unbound variable
人間'.`
これはテストの最初の関数であるため、これより前の変数の初期化はありません。初期化されていない変数を関数の引数として渡すことを回避する方法はありますか?
前もって感謝します。
lisp - clisp、CLOS:後でオブジェクトを再入力します
animal
サブクラス、、、およびをhorse
含むduck
クラスがあるとしrabbit
ます。make-instance
クラスのいくつかのオブジェクトを作成するために使用するとしますanimal
。ずっと後になって、これらのオブジェクトのそれぞれについて、それが実際には、、、、horse
またはであることがわかりましduck
たrabbit
。これらのオブジェクトを再入力する方法はありますか?適切なサブタイプの新しいオブジェクトを作成し、すべてのスロットのデータをコピーするだけでは、不器用になります。この時点で、そのようなオブジェクトは、さらに他のオブジェクトのスロットにあるリストにすでに表示されているため、移動する必要があります。それらのリストを調べて、古いオブジェクトを新しいオブジェクトに置き換えます。
同じ古いオブジェクトを保持し、それらをサブ分類します。これはできますか?
common-lisp - CLOSメソッド定義では、スペシャライザーは単一のクラスではなく、クラスのリストにすることができますか?
スーパークラスを介して実行する必要があるため、一般的なケースではあまり意味がありませんが、特定のパラメーターに「nil」を許可し、別のメソッドを定義する必要がないようにします。
私はそのようなことをしようとしています(擬似コード)
object - CLOS オブジェクトを複製する一般的な方法はありますか?
CLOSオブジェクトを浅い方法で複製する方法を探しているので、作成されたオブジェクトは各スロットで同じ値を持つ同じタイプになりますが、新しいインスタンスになります。私が見つけた最も近いものは、構造体に対してこれを行う標準関数 copy-structure です。
lisp - Lispクラスからスロットとアクセサーをエクスポートする方法は?
これは私のクラスのパッケージです:
bar
パッケージ内のインスタンスを作成できますcl-user
。
しかし、メンバーにアクセスできませんbaz
。slot-value
そのように呼び出す...
...次のエラーメッセージが表示されます。
私はすでにリストに追加しようとしbaz
ました:export
が、それも機能しません。
パッケージからスロットとアクセサーをエクスポートする方法は?
memory-management - CommonLispのオブジェクトによるメモリ使用量
クラスのインスタンスまたは一般的な基本データ型によって使用されているメモリの量を確認する方法はありますか?
私はclにおもちゃのウェブフレームワークを持っています。これはhtmlタグとそのプロパティを表すクラスのインスタンスでウェブページを作成および管理します。彼らはhtmlページを作成することになっているので、子と呼ばれるスロットに子があります。そのため、このアプローチを採用した場合、ユーザーのセッションにサーバーのコストがかかることを考えていました。ありがとう。
lisp - CLOS:スロットに強制的なシンボルのベクトル型を持たせる方法は?
SBCL のスロットにシンボルのベクトルを格納できるクラスを作成しようとしています。設定方法がわかりません。
これまでの私の最良の推測は
これにより、次のエラーが返されます。
いくつかの実験では、タイプを に変更してsymbol
も同じエラーが返されることが示されています。Common Lisp では有効な型だと思っていsymbol
ましたが、間違っていますか?
どうすればこれを機能させることができますか?
[編集]
上記の問題は、2012 年 9 月 22 日の Slime ビルドで Emacs 24.2 の下で SBCL 1.0.58 を実行したときに発生しました。コマンドラインから SBCL 1.0.58 を実行しても問題ありません。これは SBCL の問題ではないようです...
garbage-collection - CLOSの一時クラス
CLOSで一時クラスを作成する標準的な方法はありますか。つまり、すべてのインスタンスが停止した後にGCを実行できるクラスですか?
SBCLでは(setf test (defclass #:foo () ()))
、つまり、通常はクラスがGCによって保持される原因となったのはクラスの名前だけであると想定して、インターンされていないシンボルを使用しましたが、そのクラスにSBCLファイナライズ関数をインストールしてから、シンボル値を設定しました。 TEST to NILは、何度実行しても、クラスがGCされないことを示しています(gc :full t)
。それが可能かどうか、もしそうなら、どのように可能か疑問に思います。
lisp - CommonLispの標準オブジェクトと標準クラスの階層
私はCommonLisp(Lispworksを使用)を勉強していて、今クラスシステムに入ろうとしています。標準オブジェクトと呼ばれるクラスがあり、次のように定義されています。
クラスstandard-objectは、standard-classのインスタンスであり、それ自体を除くstandard-classのインスタンスであるすべてのクラスのスーパークラスです。
(http://www.lispworks.com/documentation/HyperSpec/Body/t_std_ob.htm#standard-objectから取得)したがって、これは標準クラスのインスタンスです。
一方、standard-classはstandard-objectのサブクラスです。
標準オブジェクトを標準クラスのスーパークラスにすると同時に、そのインスタンスにする方法はありますか?標準クラスをサブタイプとして定義する場合、そのスーパータイプ(標準オブジェクトなど)の定義後に定義する必要があります。スーパークラスがインスタンスになるのはどうしてですか?または私の論理はちょうど間違っていますか?
macros - Common Lisp: マクロ展開時間の制御
私は Common Lisp で作業していて、次の形式のスロット定義を非常に多く入力していることに気付きました。
そこで、これを高速化するためにマクロを作成することを考えました。私は次のことを思いつきました:
間違いなく汚いハックですが、機能的です。とか、そう思いました。コードを実行しようとしたとき、問題が発生しました。defclass はマクロであるため、引数は評価されずに渡されます。つまり、見るのではなく
見える
もちろん、これはエラーを示します。
答えは、defclass の前にクイックスロットが確実に展開されるように、マクロ展開の順序を何らかの方法で制御することです。これが私の質問につながります: どうすればこれを達成できますか? または、私の最初の難問に対する別の解決策がある場合、それも評価されないわけではありません.