5
票
承認済み
Greenspun's tenth ruleとは何なのか?
「グリーンスパンの第10法則」は、「車輪の再発明」に近い機微の言葉かと思います。
1980年代後半のグリーンスパン氏は、大規模なソフトウェア開発と関わる中で、大規模なCやFortranでの開発は、Common Lispの言語機能を再実装する頻度が高いことに気付き、架空の法則をでっち上げました。
適当に記憶に残りやすい番号をふってみただけとのことで、第1-9法則は存在しません。
時代背景として、...
4
票
承認済み
common-lisp の setq はいつ使うのか?
setqはどんなケースで使われるのか教えて下さい。
setqは、変数への代入全般で使います。基本的に他の言語と変わりありません。
Lisp特有のところとしては、シンボルというオブジェクトが値を格納する場所を持っており、この場所に値を代入できることです。
コンピュータ言語には、
変数宣言がいらない言語
変数宣言が必要な言語
がありますが、Common Lispは、変数宣言が必要な言語です。(...
3
票
承認済み
listからcdrして得たstringをread-from-stringすると文字列ではないとエラーが出る
実際は ("70" . nil) が取得されているため、"70" を取得するにはもう一度carしないとダメだからという理解で合っているでしょうか?
はい。
CLHS: Accessor CAR, CDR, CAAR, CADR, CDAR...
Syntax:
cdr x => object
Description:
If x is a cons, ...
2
票
xyzzyで((4 1 . #1=(2 . #2=(3))) (1 4 . #1#) (1 2 4 . #2#) (1 2 3 4))は普通のリストで表示されない
#1= #1# というのはCommon Lisp系Lispでは同じデータを参照していることを示す表示です。
xyzzyはCommon Lispに六割程度準拠とのことですが、Common Lispであれば、 *print-circle* を nil に設定することで、共有構造の表示を無効にできます。
(setq *print-circle* nil)
(ins 4 nil '(1 2 3))
...
2
票
Emacs系のエディタを一通り学習する手順を教えてください
Emacsについては、インターネットやその他の書籍に情報は多数存在していますが、なにぶん歴史の長いソフトウェアであるため、最新のバージョンには適さない古い情報が多く存在しています。
そこで、2017年に出版された改訂版Emacs実践入門という書籍を利用するのが比較的情報も新しく、初学者向けの内容であるため優れているかと存じます。
[改訂新版]Emacs実践入門―思考を直感的にコード化し、...
2
票
承認済み
Common Lispでのインスタンス初期化の書き方が分からない
手元の Lisp 処理系は GNU CLISP 2.49.93+ (2018-02-18) なのですが、initialize-instance を override する場合には、引数に &rest _ を指定する必要があるので、以下ではその様にしています。また、(setq (bmi-bmi x) ...) では setq ではなく setf を使います。
(defclass bmi ()
...
2
票
承認済み
Commn lisp コマンドライン引数の処理について
表示されるメッセージは以下の通りで、コンパイル時のワーニングです。(実行時には person の内容が表示されます)
; compilation unit finished
; Undefined variable:
; PERSON
; caught 1 WARNING condition
CLHS に以下の説明があります。
CLHS: Macro DEFPARAMETER, ...
1
票
承認済み
common-lisp loop の変数をbit型ではなく、Integerで回すには?
Bit型をInteger型にキャストする
bit 型は integer 型でもあります。
CLHS: Type BIT
Description:
The type bit is equivalent to the type (integer 0 1) and (unsigned-byte 1).
$ sbcl
This is SBCL 2.2.9.debian, an ...
1
票
承認済み
common lisp で while の使い方が解らない
half 関数ですが、除算(/)の結果が整数ではなく、rational 型になる場合があるので floor 関数を使います。
* (type-of (/ 3 2))
RATIO
* (oddp (/ 3 2))
debugger invoked on a TYPE-ERROR @530D0FE4 in thread
#<THREAD "main thread" ...
1
票
Common Lispでのインスタンス初期化の書き方が分からない
ストレートな回答は既にあるので、プログラミングスタイル的な観点��ら回答します。
Common Lispではメソッドはクラスに従属していないため、クラスというモジュールの中で計算をするという意識が希薄です。
大抵は、関数+データ構造でのプログラミングをベースにクラスの継承機構を活用するというスタイルになります。
そのため、今回のようなBMIの計算についても、...
1
票
承認済み
Common Lispの引数有りメソッドの書き方
立方体の体積を求めるメソッドの書き方と呼び出し方
(defmethod cube ((x square) tall)
(* (shape-width x) (shape-height x) tall))
(format t "~d" (cube sq 5))
追記
cuboid クラスと volume メソッドを定義してもよいかと思います。
(defclass ...
1
票
common lispのデバッガーの使い方を教えて下さい。
既に参考文献のなかに挙げられていますが、Debugging Lispには邦訳があり、対話的/非対話的な使い方の双方が解説されています。
日常的に使う範囲はほぼ網羅されていると思いますので、かなり有用かと思います。
https://glider-gun.github.io/blog/2015/12/19/debugging-lisp-part-1-zai-konpairu/
また、Common ...
1
票
承認済み
Common Lispで、#.を使って値の埋め込みをしたい
まず、#.はリード時に作用するものなので、コンパイル時に作用するものではありません。
リード時はコンパイル時より先に来ます。
test-funcをできるだけ先に評価しようとして、eval-whenを付けて、最も早い評価タイミングにしたとしても、コンパイル時までになりますのでやはり手遅れ、というのが起きている現象です。
通常、上記のようなコードは、ロード時(...
無効化に投票