タグ付けされた質問 「common-lisp」

23
LISPを学ぶための最良の方法は何ですか?[閉まっている]
現在のところ、この質問は、Q&A形式には適していません。事実、参考文献、専門知識によって回答が裏付けられることを期待していますが、この質問は、討論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問が改善され、場合によっては再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 私は2、3年前からPython、PHP、Java、Cでプログラミングしており、ハッカーとペインターを読み終えたばかりなので、LISPを試してみたいと思います! 私が知っていることとはまったく異なり、簡単ではないことを理解しています。また、LISPに関連するコミュニティや開発の数ははるかに少ないと思います(間違っている場合は修正してください)。だから私の質問は:LISPを学ぶための最良の方法は何ですか? 本を買ったり、時間をかけてもかまいません。無駄にしたくないだけです。 「最終的な」アイデアはWeb開発にLISPを使用することですが、それはそれほど一般的ではないことを知っています...最初の本やチュートリアルを選び、そうでない可能性のあるものに多くの時間を費やす前に学習計画を立てることは良いことです。最善の方法です! ご回答ありがとうございます! 編集:私はPractical Common Lispを読みました:...長くて難しい、興味深い、そして間違いなく私はLispを使い始めました、その後私は小さなスキーマを読みました、そしてそれは短く、楽しくそして私の全体的なプログラミングにとって非常に良いものでした。したがって、私の推奨事項は、最初に小さなスキーマを読んで、次に(数時間とその価値がある)lisp(またはスキーマまたはその他の方言)が探しているものではないと判断した場合でも、非常に楽しいことです再帰についての新しい考え方!
167 lisp  scheme  common-lisp 


30
現実世界のLisp
私はLisp(実際にはScheme)を実験しましたが、それが私がもっと学びたいと思っている非常に美しい言語であることがわかりました。しかし、Lispが深刻なプロジェクトで使用されることは決してないようで、どの求人でも望ましいスキルとしてLispがリストされているのを見たことがありません。Lispを使用したことがある人、または「現実の世界」で使用されているのを見た人、またはそれが純粋に学術的な言語と見なされているかどうかを知っている人からの連絡に興味があります。

4
Lispに関するPaul Grahamのポイントのいくつかを説明してください
Paul GrahamのWhat What Lispのポイントのいくつかを理解するのに助けが必要です。 変数の新しい概念。Lispでは、すべての変数は事実上ポインタです。値は、変数ではなく型を持つものであり、変数の割り当てまたはバインドは、ポインタが指すものではなく、ポインタのコピーを意味します。 シンボルタイプ。シンボルは文字列とは異なり、ポインタを比較することで等価性をテストできます。 シンボルのツリーを使用するコードの表記。 言語全体が常に利用可能です。読み取り時、コンパイル時、および実行時に実際の違いはありません。読み取り中にコードをコンパイルまたは実行し、コンパイル中にコードを読み取りまたは実行し、実行時にコードを読み取りまたはコンパイルできます。 これらのポイントはどういう意味ですか?CやJavaなどの言語ではどのように違うのですか?Lispファミリ言語以外の他の言語には、これらの構成要素のいずれかがありますか?

12
なぜeval evilなのか?
LispとSchemeのプログラマーは、eval厳密に必要な場合を除いて、通常はそれを避けるべきだと言っています。いくつかのプログラミング言語について同じ推奨事項を見てきましたが、の使用に対する明確な議論のリストはまだ見ていませんeval。使用の潜在的な問題の説明はどこにありますかevalか? たとえば、私GOTOは手続き型プログラミングの問題を知っています(プログラムが読み取りにくくなり、保守が困難になり、セキュリティの問題が見つけにくくなるなど)。しかし、eval。 興味深いことに、GOTO継続に対しても同じ議論が当てはまるはずですが、たとえば、Schemersは継続が「悪」だとは言っていないようです。使用する場合は注意が必要です。彼らはeval継続を使用するコードよりもコードを使用するほうが眉をひそめる可能性がはるかに高いです(私が見る限り、私は間違っている可能性があります)。


4
Clojureと他のLispの比較[終了]
現在のところ、この質問はQ&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 9年前休業。 私の質問の目的は、炎上戦争を開始することではなく、どのような状況で各言語が「仕事に最適なツール」であるかを判断することです。 私はClojureに関するいくつかの本(Programming Clojure、Practical Clojure、The Joy of Clojure、およびManning Early Access edition of Clojure in Action)を読んだことがあり、それは素晴らしい言語だと思います。私は現在、Common Lispマクロを主に扱っているLet Over Lambdaを読んでおり、それも非常に興味深い言語です。 私はLispのエキスパートではありません(初心者の方が多いです)が、関数型プログラミングと同様に、この言語ファミリーは私を魅了します。 Clojureの利点(および「その他」の欠点): JVMで実行されます。 JVMは非常に安定した高性能言語環境であり、Sunの「一度書くとどこでも実行できる」という夢を十分に満たしています。Macbook Proでコードを記述し、それを実行可能なJARファイルにコンパイルして、追加のテストをほとんど行わずにLinuxとMicrosoft Windowsで実行できます。 (ホットスポット、その他)JVMは、高品質のガベージコレクションと、非常に高性能なジャストインタイムのコンパイルと最適化をサポートしています。ほんの数年前、Cで高速に実行する必要のあるすべてのものを書いたのですが、今ではJavaで実行することをためらっていません。 標準のシンプルなマルチスレッドモデル。Common Lispには標準のマルチスレッドパッケージがありますか? 、、、およびでこれらすべての括弧の単調さを分解しますが[]、Common Lispの専門家はおそらく、リーダーマクロを使用すると、それらをCLに追加できると教えてくれます。{}#{} Clojureの欠点: JVMで実行されます。 末尾再帰や継続はありません。Common Lispは継続をサポートしていますか?Schemeは両方のサポートを必要とすると私は信じています。 その他の利点(特にCommon Lisp)(およびClojureの欠点): ユーザー定義可能なリーダーマクロ。 他の利点は? 考え?その他の違いは?

11
Lisp開発のためのVimの使用
私はしばらくの間Lispをオン/オフしてきましたが、Lispで「実際の」作業を行うことに真剣に取り組んでいます。私はVimの大ファンであり、Lisp開発用のエディターとしてVimを使用することで、どのようにして最も生産的になることができるのかと思っていました。プラグイン、ワークフローの提案などはすべて大歓迎です。 私はすでにVimに着手していて、エディターとして本当に楽しんでいるので、「use emacs」と言わないでください。
87 vim  ide  lisp  common-lisp 

16
CommonLispでのLET対LET *
私はLETとLET *(並列結合と順次結合)の違いを理解しており、理論的な問題としては完全に理にかなっています。しかし、実際にLETが必要になったことがある場合はありますか?私が最近見たすべてのLispコードでは、すべてのLETを変更なしでLET *に置き換えることができます。 編集:わかりました、なぜ誰かがLET *を、おそらくマクロとして、昔に発明したのか理解しています。私の質問は、LET *が存在することを考えると、LETが留まる理由はありますか?LET *がプレーンなLETと同じように機能しない実際のLispコードを書いたことがありますか? 私は効率性の議論を買いません。まず、LET *をLETと同じくらい効率的なものにコンパイルできるケースを認識するのはそれほど難しいことではないようです。第二に、CL仕様には、効率を中心に設計されたようには見えないものがたくさんあります。(型宣言付きのLOOPを最後に見たのはいつですか?それらが使用されているのを見たことがないので、理解するのが非常に困難です。)1980年代後半のDick Gabrielのベンチマークの前は、CLはまったく遅かったです。 これは下位互換性の別のケースのようです。賢明なことに、LETほど基本的なものを壊すリスクを冒したいと思った人はいませんでした。それは私の予感でしたが、LETがLET *よりも途方もなく簡単にたくさんのことをしたという私が見逃した愚かな単純なケースを誰も持っていないことを聞いて安心しています。
81 lisp  common-lisp 

4
Common Lispのローカル状態
Common Lispの初心者の質問: 呼び出すたびに独自のローカルバインディングを持つ個別の手続き型オブジェクトを返すようにプロシージャを作成するにはどうすればよいですか?現在、letを使用してローカルステートを作成していますが、2つの関数呼び出しが同じローカルステートを共有しています。これがコードです (defun make-acc () (let ((balance 100)) (defun withdraw (amount) (setf balance (- balance amount)) (print balance)) (defun deposit (amount) (setf balance (+ balance amount)) (print balance)) (lambda (m) (cond ((equal m 'withdraw) (lambda (x) (withdraw x))) ((equal m 'deposit) (lambda (x) (deposit x))))))) ;; test (setf peter-acc …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.