んじゃ経路探索について調べろ。おわり。
>>156 > 専門用語出てきても調べるんで、
>>151 を調べるといい。
あるいはその前に深さ優先探索と幅優先探索あたり?
ここで返事を待つより Google で出てきたのを上から順番に読んでった方が多分早いよ。
つまり、私や他の誰かが、どれくらいかも判らないあなたのレベルに合わせて
説明をひねり出すより、あなたが自分のレベルにあった説明を探した方が早いよ。
少なくとも何かを読んであなた自身が判ったか判らなかったかはあなたには判るんだから。
……ていうか別にこれ Common Lisp 固有の話題じゃあないじゃないか。
問題019
与えられた集合のべき集合を求める関数powersetを定義せよ。
(powerset '(a b c))
=> (() (a) (b) (c) (a b) (b c) (c a) (a b c))
>>159 集合だから順序は不問だよね。
(defun power (x)
(if (null x)
'(nil)
(let ((y (power (cdr x))))
(append y (mapcar #'(lambda (z) (cons (car x) z)) y)))))
こちらのほうがすっきりかな。
(defun power (x)
(if (null x)
'(nil)
(mapcan #'(lambda (y) (list (cons (car x) y) y))
(power (cdr x)))))
(defun powerset (x)
(fold (lambda (y z) (fold (lambda (a b) (cons (cons y a) (cons a b))) '() z)) '(()) x)
スレ違い
異教徒の特徴
* 引数の名前に lis lst のように間数名とかぶらない不自然な名前を使う
Common Lisp では変数と関数は名前空間を共有してないのにね
* 繰り返しを使わず labels & 末尾再帰
Common Lisp は末尾呼び出しの最適化を保証してないよ
* SRFI の手続き (特に SRFI-1) を使う
SRFI 等の外部モジュールを使う方法は R5RS では定義されてないじゃない
異教徒の特徴(追加)
* lambda 式の前の #' を省略する。
(ANSI Common Lisp では OK になったが古くからの信徒は #' を省略しない)
>>166 それだと多くの処理系の作成にも異教徒が入り込んでることになるが
>>167 処理系は異教徒表記を受け入れる(受け入れなければANSI違反なので)が、
多くの処理系作成者は自分でプログラムを書くときには #' を省略しない。
Common Lisp教は寛容なので異教徒にも優しくしてやっているのだ。
>>168 じゃなくて、処理系自体の実装で #' が省略されてるのが多々あるってこと
昔は入れてたけど今はlambdaの#'は使わないな。
逆にそうでないとわかるものを使うときに#'を入れるか、lambda自体をdefmacroする。
(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
↑を評価してくれにょ
(コンパイラスレを荒らしてた奴が出てきたか…?)
何か人いないみたいだから、自分で自分にお題
【2ch に Lisp コードを貼付ける時用の pprint】
仕様:
- 関数またはマクロとして実装
- 整形対象のプログラムは quote して、引数として渡す
- pprint を通す
- 出力は小文字で
- 行頭スペースは & n b s p ; に変換する
- 行幅は適当
- あと何か思いついたら付け足す
文字列をとる2ch貼り付け用のはもう作ってる。それにppの出力を入れれば
いいんだけど、elispで書いちゃったからここには貼れないなw
176 :
デフォルトの名無しさん:2006/02/26(日) 12:59:35
カラアゲ保守
Lambdaってタイプするのめんどくね?保守
>>177 emacs の abbrev/dabbrev 使っているから別に
(defmacro l (&body body)
`(lambda ,@body))
ってやったら怒られた。いまは反省している。
(defmacro λ (&body body)
`(lambda ,@body))
だろ。
allegro以外で大文字小文字区別するリーダーが標準かオプションで
ついてる処理系ってあるの?
>>181 Common Lisp の標準。readtable-case あたりを調べるべし。
個人的には :invert を常用している。
オプションつーか,Common Lisp は大文字小文字を区別できる.
標準の設定が
読み込み時: 大文字に揃える
出力時: 大文字に揃える
になってるだけ.(setf (readtable-case *readtable*) :preserve) ってすりゃ
大文字小文字区別できるよ.ただし標準の CL の変数や関数はすべて大文字な
のでCAR とか *READTABLE* とか書く必要がでてくるのでダル.:invert すると
symbol-name とかがいけてない.
Allegro のような使い心地のは CLISP の -modern モードかな?標準の組み込
みのシンボル小文字で,大文字小文字は区別.かつ,パッケージ毎に切り替え
られる.
標準の機能であったんですか。ありがとうございます。
まだまだ知らないことが沢山……
λ門保守
やばっ、酔ってたとはいえ入社式がλ社式に見えた…
ねーよwwww
lambdaでググると、世界中のλ社がリストアップされるよ。
λパワーだったりλアメリカだったりλアンテナだったり・・・。
たまに村田がλに思えてくるよ
HalfLife?
λっちゃ
三菱車ギャランΛ。
>>193 > 三菱車ギャランΛ。
年齢バレますよ。オレモナー
n種類の要素から異なるk個を選んで順列を作ると
P(n,k)=n!/k! 通りの順列を作ることができます。
P(n,k)通りの順列を全て含んでいる長さP(n,k)の円順列を作るには
どうすれば良いのでしょうか?
また宿題かw
うーん練習がわりに作ろうと思いましたがリアル厨房なんで
;; 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 で検索しましたが…。来週の水曜日に数学の先生にでも聞いてみようかなぁ。
円順列を作るってのがよくわからんなあ
(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#)
みたいな関数を作れってこと?
まあいかにも宿題っぽくはある。
円順列として同じもの((a b c)と(b c a)みたいな)を取り除いたリストを作れって問題かな?
>>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
206 :
デフォルトの名無しさん: