問題タブ [allegro-cl]
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.
common-lisp - Allegro Common Lisp で作成された C++ ラッパーを SBCL または CLISP で使用できますか?
現在、C++ コードを Lisp でラップする方法を学んでいるので、Lisp から C++ 関数を呼び出すことができます。私は SWIG について学んでおり、SWIG の Allegro Common Lisp 部分についてもっと知りたいと思っています。現在、Allegro の Express (無料) 追加機能を使用していますが、ヒープ制限が 50MB 程度であるため、Lisp 用の GNU Scientific Library である GSLL をロードできません。
GSLL のコード、SWIG で作成した OpenCV の Lisp ラッパー、および SWIG で作成した C++ コードの他の Lisp ラッパーのコードを使用する巨大なアプリを作成したいと考えています。OpenCV のすべてを使用できるようにしたいと考えています。 Lisp の C++ インターフェース関数と SWIG の Allegro Common Lisp C++ サポートは、ほとんどの C++ 関数をラップするための最も完全な (間違っていたら訂正してください) 最良の方法のようです。(これは、SWIG マニュアルの Allegro Common Lisp セクションがCommon Lisp セクションよりもはるかに大きいためです。
Allegro Common Lisp Express エディションで Lisp 用の OpenCV C++ バインディングを作成し、それらを SBCL または CLISP に移動して、ヒープ制限がない、または Allegro/ SWIG パートナーシップは、Allegro Common Lisp の SWIG Allegro チュートリアルで Allegro で作成された SWIG C++ ラッパーのみを使用していると見なします。
Allegro Common Lisp のサポートが他の実装よりも完全であると仮定するのが間違っている場合、または OpenCV の C++ 関数のすべてをラップするより良い方法がある場合、または OpenCV の C インターフェイスが C++ と同じくらい完全である場合は、訂正してください。インターフェイスと私はそれをラップすることができます。
必要に応じて、オンライン リソースを引用してください。
lisp - Allegro CL Free Express Edition 9.0 では関数定義をどこに書くべきですか?
関数定義はどこに書くべきdefun
ですか? デバッグウィンドウまたはエディターで? 両方の場所に定義を書き込もうとしましたが、エラーが発生しています。
common-lisp - ACL 以外の Lisp で AllegroGraph を使用する方法はありますか?
私は今のところドキュメントを読んでいるだけですが、Lisp クライアントを使用するには ACL を使用する必要があると書かれています。ACL、Express エディションの有効期限は 30 日です。私は商用利用を考えることさえできないので、観察可能な将来にそれを購入する可能性は低い.
他の Lisp で試した人はいますか? ライセンスで許可されていますか?(私の推測では「はい」です。たとえば、Python クライアントはもちろん特別な購入を必要としないためです。)
python - ソケットを介して通信するlispおよびpythonプログラムのタイミングの問題
Python プログラムと Allegro Common Lisp プログラムをソケット経由で通信させようとしています。今のところ、接続をリッスンするLispサーバーをセットアップし、Pythonクライアントをサーバーに接続してから、クライアントからサーバーに簡単なメッセージを送信しようとしています。Lisp サーバーは次のようになります。
Python クライアントは次のようになります。
複数のメッセージがこのストリームを通過するようにしたいので、サーバー側で着信データをリッスンし、それをエコーします。しかし、sleep コマンドをコメントにして実行したところ、問題に気付きました。出力は次のようになります。
つまり、実際にはデータをエコーしませんでした (私の場合は "(list AB)")。sleep コマンドのコメントを外すと (接続の開始とデータの送信の間に遅延を導入するため)、出力は次のようになります。
なぜそうなのかはわかりません。誰かがこれに対する解決策を持っていますか? 複数のデータ交換に同じソケット接続を再利用するのは悪い考えですか? ループマクロ呼び出し全体を削除すると(したがって、1回限りの交換になります)、データは問題なく受信され、適切にエコーされます
編集 1: sleep コマンドがコメントされていても、最後のステートメントは true です。
search - Lisp ハッシュ記号は戻り値を置き換えます
特定のノードからのすべての可能なパスを含む、グラフの幅優先ツリーのような構造に似たものを構築しようとしています。ポップアップするある種のエラーほど、アルゴリズムに問題はありませんでした。以下に関連するコードを示します。
関数検索ツリーは (search-tree my-graph '(A) '()) と呼ばれ、ほぼすべてを正しく返しますが、# 記号に置き換えられた最初のターミナル ノード ((J) のはずです) )。ここで何が問題になる可能性がありますか?
それが戻り値です。
(A (B (D (E (H #))) (E (H (J)))) (C (F (H (J)) (I (J))) (G (I (J)))))
コードをトレースしてみましたが、再帰の途中で (J) リストが # 記号に置き換えられた理由がわかりません。
nested - ネストされた `defun` は、Allegro Common Lisp で繰り返し警告を生成します
私は Common Lisp でマージソートの一般的な実装を持っています: 私は分割関数とマージ関数の異なる実装を持っており、分割関数とマージ関数の組み合わせごとにマージソート関数を構築したいと考えています。
- どの分割関数も文字列のリストを入力として取り、2 つのリスト (元のリストの 2 つの半分) のリストを返します。
- どのマージ関数も、2 つの並べ替えられたリストを入力として取り、並べ替えられたマージされたリストを返します。
各マージ ソート関数は、次の関数を呼び出すことによって作成されます。
名前をプライベートに保ち、名前空間を台無しにしないように、merge-sort
内部で定義しました。make-merge-sort-function
私のコードは、いくつかの Common Lisp 実装 (Steel Bank Common Lisp など) で動作します。
- すべてのテスト実行の出力が適切にソートされ、
- 結果のマージソート関数ごとに実行時間が異なり、異なる分割/マージの組み合わせが使用されたことを示しています。
したがって、私のコードは正しいと思います。
ただし、Allegro Common Lisp でプログラムを実行すると、次の警告が表示されます。
whereは呼び出されるfoo.lisp
ファイルです。したがって、プログラムは正常に動作しますが、最初の呼び出しの後にmake-merge-sort-function
呼び出しごとにこの警告が出力されます。関数をグローバルmake-merge-sort-function
にすると (2 つの引数とが追加されます)、警告は消えます。merge-sort
split-function
merge-function
Allegro Common Lisp では、この警告の意味に関する兆候は見つかりませんでした。私が試した他の実装 (ABCL、CMUCL、CCL、CLISP、SBCL) では、警告は表示されません。内部関数 (クロージャー) の新しいインスタンスが複数回定義されても問題ないと思いますが、これが問題になる理由がわかりません。何か案は?
common-lisp - Allegro CL の pprint
Common Lisp で、他の Lisp ファイルを動的に作成するプログラムを作成しようとしています。Common Lisp のprint
関数は、この目的に非常に役立つようです。残念ながら、この関数はデータを 1 行で出力します。例(標準出力に出力するだけ):
生成された Lisp ファイルは人間が読める必要があるため、空白を最小限に抑えるべきではありません。pprint
関数が私の問題の解決策であるようです。pprint*pretty-print*
が true に設定されているため、関数は複数行に出力する必要があります。言い換えると:
ただし、Allegro CL では、pprint は print と同じように動作するようです。出力は 1 行のみです。関数に s 式を「きれいな」方法で出力させる方法はありますか? 関数が正しく出力される前に設定する必要がある他のグローバルはありますか? 私が探している代替関数/マクロはありますか? 助けてくれてありがとう!
lisp - Lisp、エラー: バッククォート内にカンマがありません。[ファイル位置 = 762]
Lisp のコーディング例をインストールするための指示に従っていますが、Allegro CL を使用してファイル「aima.Lisp」をロードしようとすると、「バッククォート内にカンマがありません」というエラーが表示されます。
これはファイルのコードです (編集されていないコードはここにあります):
Lisp を使用するのはこれが初めてで、エラーを見つけるのに苦労しています。