【一日】CommonLisp【一門】

このエントリーをはてなブックマークに追加
157デフォルトの名無しさん:2005/09/27(火) 19:59:40
んじゃ経路探索について調べろ。おわり。
158デフォルトの名無しさん:2005/09/28(水) 04:13:23
>>156
> 専門用語出てきても調べるんで、
>>151 を調べるといい。
あるいはその前に深さ優先探索と幅優先探索あたり?

ここで返事を待つより Google で出てきたのを上から順番に読んでった方が多分早いよ。
つまり、私や他の誰かが、どれくらいかも判らないあなたのレベルに合わせて
説明をひねり出すより、あなたが自分のレベルにあった説明を探した方が早いよ。
少なくとも何かを読んであなた自身が判ったか判らなかったかはあなたには判るんだから。

……ていうか別にこれ Common Lisp 固有の話題じゃあないじゃないか。
159デフォルトの名無しさん:2005/11/03(木) 22:50:40
問題019
与えられた集合のべき集合を求める関数powersetを定義せよ。

(powerset '(a b c))
=> (() (a) (b) (c) (a b) (b c) (c a) (a b c))
160デフォルトの名無しさん:2005/11/03(木) 23:02:10
>>159
集合だから順序は不問だよね。
(defun power (x)
 (if (null x)
   '(nil)
  (let ((y (power (cdr x))))
   (append y (mapcar #'(lambda (z) (cons (car x) z)) y)))))
161デフォルトの名無しさん:2005/11/03(木) 23:13:06
こちらのほうがすっきりかな。
(defun power (x)
 (if (null x)
   '(nil)
  (mapcan #'(lambda (y) (list (cons (car x) y) y))
        (power (cdr x)))))
162デフォルトの名無しさん:2005/11/05(土) 13:05:33
(defun powerset (x)
(fold (lambda (y z) (fold (lambda (a b) (cons (cons y a) (cons a b))) '() z)) '(()) x)
163デフォルトの名無しさん:2005/11/05(土) 14:24:41
スレ違い
164デフォルトの名無しさん:2005/11/05(土) 14:35:01
>>162
異教徒
165デフォルトの名無しさん:2005/11/05(土) 19:40:18
異教徒の特徴
* 引数の名前に lis lst のように間数名とかぶらない不自然な名前を使う
 Common Lisp では変数と関数は名前空間を共有してないのにね
* 繰り返しを使わず labels & 末尾再帰
 Common Lisp は末尾呼び出しの最適化を保証してないよ
* SRFI の手続き (特に SRFI-1) を使う
 SRFI 等の外部モジュールを使う方法は R5RS では定義されてないじゃない
166デフォルトの名無しさん:2005/11/05(土) 19:50:45
異教徒の特徴(追加)
* lambda 式の前の #' を省略する。
 (ANSI Common Lisp では OK になったが古くからの信徒は #' を省略しない)
167デフォルトの名無しさん:2005/11/05(土) 20:20:05
>>166
それだと多くの処理系の作成にも異教徒が入り込んでることになるが
168デフォルトの名無しさん:2005/11/05(土) 20:55:08
>>167
処理系は異教徒表記を受け入れる(受け入れなければANSI違反なので)が、
多くの処理系作成者は自分でプログラムを書くときには #' を省略しない。
Common Lisp教は寛容なので異教徒にも優しくしてやっているのだ。
169デフォルトの名無しさん:2005/11/05(土) 21:11:53
>>168
じゃなくて、処理系自体の実装で #' が省略されてるのが多々あるってこと
170デフォルトの名無しさん:2005/11/06(日) 01:36:51
昔は入れてたけど今はlambdaの#'は使わないな。
逆にそうでないとわかるものを使うときに#'を入れるか、lambda自体をdefmacroする。
171デフォルトの名無しさん:2005/11/11(金) 14:11:53
(DEFUN MYSTERY(S)
(COND ((NULL S)0)
((ATOM S)1)
(T(MAX(ADD1(MYSTERY(CAR S)))
(MYSTERY(CDR S))))))
172デフォルトの名無しさん:2005/11/13(日) 12:55:26
↑を評価してくれにょ
173デフォルトの名無しさん:2005/11/14(月) 00:34:27
(コンパイラスレを荒らしてた奴が出てきたか…?)
174デフォルトの名無しさん:2006/01/03(火) 07:31:25
何か人いないみたいだから、自分で自分にお題
【2ch に Lisp コードを貼付ける時用の pprint】

仕様:
- 関数またはマクロとして実装
- 整形対象のプログラムは quote して、引数として渡す
- pprint を通す
- 出力は小文字で
- 行頭スペースは & n b s p ; に変換する
- 行幅は適当
- あと何か思いついたら付け足す
175デフォルトの名無しさん:2006/01/03(火) 15:13:17
文字列をとる2ch貼り付け用のはもう作ってる。それにppの出力を入れれば
いいんだけど、elispで書いちゃったからここには貼れないなw
176デフォルトの名無しさん:2006/02/26(日) 12:59:35
カラアゲ保守
177デフォルトの名無しさん:2006/02/28(火) 23:38:47
Lambdaってタイプするのめんどくね?保守
178デフォルトの名無しさん:2006/03/01(水) 16:05:09
>>177
emacs の abbrev/dabbrev 使っているから別に
179デフォルトの名無しさん:2006/03/01(水) 16:25:47
(defmacro l (&body body)
`(lambda ,@body))

ってやったら怒られた。いまは反省している。
180デフォルトの名無しさん:2006/03/04(土) 03:37:12
(defmacro λ (&body body)
`(lambda ,@body))

だろ。
181デフォルトの名無しさん:2006/03/04(土) 04:51:08
allegro以外で大文字小文字区別するリーダーが標準かオプションで
ついてる処理系ってあるの?
182デフォルトの名無しさん:2006/03/04(土) 12:56:53
>>181
Common Lisp の標準。readtable-case あたりを調べるべし。
個人的には :invert を常用している。
183デフォルトの名無しさん:2006/03/04(土) 13:18:45
オプションつーか,Common Lisp は大文字小文字を区別できる.
標準の設定が

読み込み時: 大文字に揃える
出力時: 大文字に揃える

になってるだけ.(setf (readtable-case *readtable*) :preserve) ってすりゃ
大文字小文字区別できるよ.ただし標準の CL の変数や関数はすべて大文字な
のでCAR とか *READTABLE* とか書く必要がでてくるのでダル.:invert すると
symbol-name とかがいけてない.

Allegro のような使い心地のは CLISP の -modern モードかな?標準の組み込
みのシンボル小文字で,大文字小文字は区別.かつ,パッケージ毎に切り替え
られる.
184デフォルトの名無しさん:2006/03/05(日) 23:21:36
標準の機能であったんですか。ありがとうございます。
まだまだ知らないことが沢山……
185デフォルトの名無しさん:2006/03/18(土) 18:38:47
λ門保守
186デフォルトの名無しさん:2006/04/07(金) 00:46:23
やばっ、酔ってたとはいえ入社式がλ社式に見えた…
187デフォルトの名無しさん:2006/04/07(金) 01:35:14
ねーよwwww
188デフォルトの名無しさん:2006/04/07(金) 02:37:48
幻のλ社は実在した!!
http://www.densei-lambda.com/indexj.html
189デフォルトの名無しさん:2006/04/07(金) 03:01:09
lambdaでググると、世界中のλ社がリストアップされるよ。
λパワーだったりλアメリカだったりλアンテナだったり・・・。
190デフォルトの名無しさん:2006/04/07(金) 11:57:49
たまに村田がλに思えてくるよ
191デフォルトの名無しさん:2006/04/08(土) 00:38:35
HalfLife?
192デフォルトの名無しさん:2006/04/08(土) 01:43:18
λっちゃ
193デフォルトの名無しさん:2006/04/18(火) 13:10:44
三菱車ギャランΛ。
194デフォルトの名無しさん:2006/06/24(土) 14:03:41
>>193
> 三菱車ギャランΛ。
年齢バレますよ。オレモナー
195デフォルトの名無しさん:2006/07/21(金) 15:53:34
196デフォルトの名無しさん:2006/07/22(土) 19:13:31
n種類の要素から異なるk個を選んで順列を作ると
P(n,k)=n!/k! 通りの順列を作ることができます。

P(n,k)通りの順列を全て含んでいる長さP(n,k)の円順列を作るには
どうすれば良いのでしょうか?
197デフォルトの名無しさん:2006/07/22(土) 19:15:47
また宿題かw
198デフォルトの名無しさん:2006/07/23(日) 03:31:07
うーん練習がわりに作ろうと思いましたがリアル厨房なんで
;; P(n,k)
(defun f (n) (if (<= n 1) n (* n (f (1- n)))))
(defun p (n k) (/ (f n) (f k)))
と与えられた定義まではできたのですが「P(n,k)通りの順列を全て含んでいる長さP(n,k)の円順列を作る」の部分の意味がわかません。Wikipedia で検索しましたが…。来週の水曜日に数学の先生にでも聞いてみようかなぁ。
199デフォルトの名無しさん:2006/07/23(日) 11:53:39
円順列を作るってのがよくわからんなあ

(foo 3 '(a b c d e))
=> #1=((a b c) (a b d) (a b e) (a c d) (a c e) (a d e) (b c d) (b c e) (b d e) (c d e) . #1#)

みたいな関数を作れってこと?
まあいかにも宿題っぽくはある。
200デフォルトの名無しさん:2006/07/23(日) 12:00:42
円順列として同じもの((a b c)と(b c a)みたいな)を取り除いたリストを作れって問題かな?
201デフォルトの名無しさん:2006/07/23(日) 16:10:48
>>196
間違い
P(n,k)=n!/(n-k)!

それから答えは以下の等式をじっとにらむと
見つかるかもしれない
P(n,k)=P(n-1,k)+P(n-1,k-1)*k
202デフォルトの名無しさん:2006/08/13(日) 01:13:40
保守
203デフォルトの名無しさん:2006/09/18(月) 04:04:35
入門書記念hosu
204デフォルトの名無しさん:2006/09/29(金) 23:17:44
入門Common Lisp〜関数型4つの特徴とλ計算
http://book.mycom.co.jp/book/4-8399-2081-8/4-8399-2081-8.shtml
205デフォルトの名無しさん:2006/10/13(金) 19:34:35
206デフォルトの名無しさん