問題タブ [practical-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.
macros - 一度だけのlispマクロを実装する方法を理解する
PeterSeibelの著書「PracticalCommonLisp」では、非常に複雑なマクロの定義を1回だけ見つけることができます(ページの下部http://www.gigamonkeys.com/book/macros-defining-your-own.htmlを参照)。 )。
このマクロ定義を過去3週間で10回読んでいますが、どのように機能するのか理解できません。:(さらに悪いことに、その目的と使用方法を理解していても、このマクロを自分で開発することはできません。
私は特に、この悪名高いハードマクロの体系的な「導出」に段階的に興味を持っています。何か助けはありますか?
common-lisp - Common Lisp のコピー ツリー: オリジナルとコピーによって共通に参照されるオブジェクトはどれか?
Practical Common Lispを読んでいて、Lisp のCOPY-TREE
機能について質問があります。
この本は、呼び出しの例を示しています
それを説明した後、本書は次のように述べています。
元のコンス セルが原子値を参照していた場合、コピー内の対応するコンス セルは同じ値を参照します。したがって、元のツリーと COPY-TREE によって作成されたコピーによって共通に参照されるオブジェクトは、数字 5、6、および記号 NIL だけです。
しかし、それは私には意味がありません。私はすべての原子がオリジナルと新しいものの間で共有されると思っていました。したがって、1、2、3、4、5、6、および NIL はすべてオリジナルとコピーの間で共有され、唯一の「新しいオブジェクト」はすべての CONS セルになると予想しました。
どちらが正しいですか、なぜですか?
ありがとう。
lisp - Practical Common LISP からの最初の演習の書式設定に関する問題
私は Practical Common LISP に取り組み始めており、最初の演習は単純なデータベースを作成することです。cygwin で GNU CLISP 2.48 (2009-07-28) を使用しています。
本と何度か比較したこのコードは、本が言うように出力を生成しません。
私は得る
format
トラブルシューティングを行うほど LISPを理解していません。この本には、データベース内のすべてのレコードのリストを取得する必要があると書かれています。何がうまくいかなかったのですか?
format - Practical Common LISP の %10t のフォーマットが間違っています
ページへのリンクは次のとおりです: Chapter 3, Practical: A Simple Database。基本的に、表示したい 4 つの値を持つリストのデータベースがあります。これは
唯一の問題は、出力が正しくないことです。
なんらかの理由で「ホーム」が 10 列目から始まらないのですが、その理由を教えていただけますか? 私は SBCL を使用してコードを実行しています。最新バージョンです。
macros - &rest / &body にもかかわらず Common Lisp マクロ引数の不一致
私は Peter Seibel の本Practical Common Lispを読んでいて、オンラインで入手できる本のコードから、本に登場する順序でプロジェクトをつなぎ合わせています。これまでのところ、各章のコードを順番にコンパイルしてロードするファイルがあります。ここで問題が発生しました。プロジェクトの FASL をロードすると、ID3v2 セクションで次のような警告が表示されます。
引数番号の競合が発生する場所がわかりません。 UNSIGNED-INTEGER
2 つのキーワード引数を取得しているようです。また、マクロは/DEFINE-BINARY-TYPE
を使用して任意の数の引数を受け入れるように思えます。何かヒントやアドバイスがあればと思いました。関連する出力とコードを以下に示します。ありとあらゆる助けをいただければ幸いです。&rest
&body
前もって感謝します、
「id3v2.lisp」の問題のある関数は次のようになります。
使用して
「binary-data.lisp」の以下から
lisp - x から y へのリストを返す xtoy と呼ばれる Lisp の関数
私はLispが初めてです。整数である 2 つの引数 x と y を取り、x から始まり y で終わる整数のリストを返す x2y という名前の関数を作成しようとしています。
common-lisp - Common Lisp:プレーン変数はLETのリストの省略形ですか?
Gigamonkey (Peter Seibel) の Practical Common Lispを読んでいて、マクロの章の DO に関するセクションで次のステートメントに出くわしました。
LET の変数定義と同様に、init-form が省略されている場合、変数は NIL にバインドされます。また、LET と同様に、単純な変数名を、名前だけを含むリストの省略形として使用できます。
「単純な変数を名前だけを含むリストの省略形として使用する」、つまり 2 番目の文について、彼が何を意味しているのかわかりません。最初の文はCommon-Lisp Hyperspec for LETにバックアップされており、 のような簡単な例(let (n) n) ~~> NIL
で示されていますが、2 番目の文に対応するものは見つかりません。実際、(let n n)
SBCL コンパイラを horks するようなものがあります。
どういう意味ですか?その使用の最小限の例は何ですか?
macros - 一度だけの Lisp マクロ、さらに別の実装
Peter Seibel の本「Practical Common Lisp」から Lisp を学ぼうとしています。第8 章「マクロ: 独自のマクロを定義する」で、この 1 回限りのマクロに出くわしました。そのページの下部に、実装が示されています。
先ほど同じ目的で自作のマクロを実装してみましたが、一度だけの Lisp マクロで指摘されたようにバグがありましたが、私の実装は正しいでしょうか? .
今回は別の代替実装を行い、うまくいけばそのバグを修正しました。今回の実装が正しいかどうか知りたいですか?
common-lisp - ecase マクロの句はパッケージの接頭辞を取ります
Practical Common Lisp で作業しようとしています。私はリスプ初心者です。
「quicklisp」を使用してパッケージを定義しました。パッケージをロードします (ql:quickload :spam filter)
このパッケージの関数の 1 つは次のようになります。
この関数を呼び出す関数をスライムで呼び出そうとすると、case ステートメントが失敗します。コンパイラがパッケージ名をプレフィックスとして句に追加したため、失敗したと思います。
これが私が見ているエラーです:
HAM は ECASE 式で落ちました。(HAM SPAM) の 1 つを求めていました。【タイプSB-KERNELの状態:CASE-FAILURE】
再起動: 0: [RETRY] SLIME REPL 評価リクエストを再試行します。1: [*ABORT] SLIME のトップ レベルに戻ります。2: [ABORT] スレッドの中止 (#)
バックトレース: 0: (SB-KERNEL:CASE-FAILURE ECASE HAM (SPAMFILTER::HAM SPAMFILTER::SPAM)) 1: (SPAMFILTER:INCREMENT-COUNT # HAM) 2: (SPAMFILTER:TRAIN "From exmh-users-admin@ redhat.com Mon Sep 23 12:06:27 2002 ..) 3: (SPAMFILTER::TRAIN-FROM-CORPUS #>((#P"/Users/jh/src/lisp/spamfilter/mail/easy_ham/1205. f9d66868c52039f7a147d9e2b4b05e1f" HAM) (#P"/Users/jh/src/lisp/spamfilter/mail/easy_ham/0090.314ec4268af7a3a1974d5e.. 4: (SPAMFILTER:TEST-CLASSIFIER #((#P"/Users/jh/src/lisp/ spamfilter/mail/easy_ham/0001.ea7e79d3153e7469e7a9c3e0af6a357e" HAM) (#P"/Users/jh/src/lisp/spamfilter/mail/easy_ham/0002.b3120c4bcbf3101e661161ee7.. 5: (SB-INT:SIMPLE-EVAL-IN-LEXENV) (SPAMFILTER:TEST-CLASSIFIER SPAMFILTER: CORPUS 0.1) #) 6: (EVAL (SPAMFILTER:TEST-CLASSIFIER SPAMFILTER:コーパス0.1)) --詳細--
私は、コンパイラが Backtrace 0 にプレフィックスを追加したという私の推測に基づいています。
0: (SB-KERNEL:CASE-FAILURE ECASE HAM (SPAMFILTER::HAM SPAMFILTER::SPAM))
明らかな何かが欠けていると確信しています。
ありがとう。