問題タブ [common-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.
lisp - さまざまな ANSI CL 実装の違いは?
この本で説かれているように、Practical Common Lisp から CL を学び始めたとき、私は Allegro CL コンパイラから始めました。コマーシャルでありながら無料のビットが印象に残っていなかったので、使用をやめました。いくつかのライセンス関連のために、リモート サーバーへの接続が必要でした。
「clisp」に切り替えて使用しています。今、私はSBCLについて聞いていて、それを使い始めようと思っています.
そこで問題は、さまざまな ANSI CL 実装がどのように異なるのかということです。どちらか一方を使用した実際の経験はありますか?
ありがとうございました。
enums - C列挙型に相当するCommon Lisp
私は最近、いくつかの Lisp (Common Lisp) を学ぼうとしていますが、列挙型を介して C でできるように、定数に名前を付ける方法があるかどうか疑問に思っています。
列挙型の完全な機能セットは必要ありません。最終的には、高速で読みやすいコードが必要です。
グローバルと小さな関数を試しましたが、常にパフォーマンスが低下しました。数値をコードに差し込むだけで、常に高速になりました。
lisp - ECLはどのようにして実行可能ファイルにASDF依存関係を含めることができますか?
私はこのecl-make.lispを持っています:
(これstumpwm-system::*components*
は私の追加でstumpwm.asd
あり、そのファイル内のASDFコンポーネントと上記のファイルの適切な順序のリストを生成するために使用されます。)
それは単に失敗します:
私は、以前の試みで導入したエラーのみを解決しているところまで来ています。依存関係を含むECLを使用してプログラムを作成した場合は、その方法を教えてください。開始時に依存関係をパントしてロードする方法がわかりますstumpwm
(ロードしなくても~/.eclrc
、ASDFに依存関係の場所を指示します)。しかし、これは可能であるはずです。
debugging - gclを使用してCommon Lispでトレースするには?
関数のすべての呼び出しを出力して、再帰的なプログラムをデバッグする方法はありますか?
lisp - Common Lisp コードを Clojure に移植する
Common Lisp アプリケーションを Clojure に移植することは、どの程度実用的ですか? より具体的に言うと、Common Lisp に存在し、Clojure には存在せず、書き直さなければならない機能は何ですか?
common-lisp - Common Lispでバイト配列を文字列に変換する方法は?
バイト配列を返す面白い API を呼び出していますが、テキスト ストリームが必要です。バイト配列からテキスト ストリームを取得する簡単な方法はありますか? 今のところ、私は一緒に投げました:
結果をwith-input-from-stringでラップしますが、それは最善の方法ではありません。(さらに、それは恐ろしく非効率的です。)
この場合、常に ASCII であることはわかっているので、ASCII または UTF-8 として解釈しても問題ありません。私は Unicode 対応の SBCL を使用していますが、SBCL Unicode 固有のソリューションよりも移植可能な (たとえ ASCII のみの) ソリューションを好むでしょう。
algorithm - Common Lisp の線形再帰リスト差分関数
私は楽しみのためにこのチュートリアルを進めていたのですが、彼が最後に言った「演習: 和と差の線形再帰的な実装を与えてください」という言葉に行き詰まってしまいました。(リスト用)
ユニオン、心配はいりません。
違い、汗。
試みはこのように見えます。. .
これで、L1 にあり、L2 にないすべての要素が返されますが、L2 のすべてが返されるだけです (明らかに)。同様に、3 行目の L2 を「nil」に変更すると、L2 にない L1 はすべて返されますが、L2 は返されません。
私の回避策の試みは再帰的ではないように見えます。再帰的であるときは、スタックオーバーフローが発生します ((list-diff L2 L1) をどこかで呼び出しようとした場合など)。
リスト交差などの彼の他の演習では、L1 の要素を実行するだけで済みます。ここで、L2 から重要な要素を取得するか、(list-diff L2 L1) を実行して、両方の結果を結合したいと考えていますが、これはもはや線形再帰的ではありません。
考え?
(実際には宿題ではありません。LISP を楽しみに見てみようと思っただけです。)
編集:応答に基づいて、これを適切に行う関数は次のとおりです。
lisp - Fibonnaciを解決するためのLisp-way
Lispを試してみたかったのですが、すぐに諦めました。もう一度やってみようと思いました。私はプロジェクトオイラーの問題2を見ています-400万未満のすべてのフィボナッチ数の合計を見つけています。
私は動作する次のコードを書きましたが、あらゆる種類の醜いです。それらの中で最も重要なのは、それが非常に遅いという事実です-それは常に素朴な再帰を行っているからです。
このプログラムをPythonで作成したとき、数値を計算したときにリストを作成しましたが、数値を再計算することはありませんでした。私はここで(どういうわけか)それができることを知っていますが、それはLispの精神、関数型プログラミングには当てはまらないようです。再帰の深さの制限に達して、再帰の代わりにループを使用するようにコードを書き直さなければならなかったとき、私は#3の後で諦めました。
だから私の質問は次のとおりだと思います:
- この問題を解決するための「正しい、しなやかな方法」とは何ですか?
- 再帰と「すべてを計算するだけ」の概念を、すべてを計算する実際的な制限とどのように調和させますか?
- The LittleSchemerとProjectEuler以外にlispを学ぶための推奨事項はありますか?
そして、これが私のコードです:
oop - CLOSのスロット
CLOSの「スロット」について説明してください。スロット名の後の部分がわかりにくいです。それは次のとおりです。
(defclass foo () (data1 :initarg foo))
「initarg」やその他の同様のことはどういう意味ですか? マニュアルを読み直しています。ですから、私のような素人に説明できる方がいらっしゃれば、本当にありがたいです。
ありがとう!
parameters - Common Lisp: &rest パラメータの操作
&rest で指定された値に格納されているパラメーターを操作する方法を教えてください。
私はたくさん読んだことがありますが、作成者はすべてのパラメーターをリストする方法しか知らないようです。
これは見やすいですが、実際にはそれほど役に立ちません。
これまでに見つけた最良の方法は、first、second などを使用して、探しているパラメーターを取得することです。
このメソッドは 10 番目のパラメーターで動作を停止することに気付きましたが、仕様 (私が読んだものから) は最小 50 をサポートしています。50 のパラメーターを使用する可能性はわずかですが、方法を知りたいです。それらすべてにアクセスします。
ありがとう