るーる ・本スレに敬意を持つこと ・lisp最強 ・括弧を崇めろ ・初心者を馬鹿にしない ・人に優しく
2 :
デフォルトの名無しさん :05/01/25 02:27:43
門? くぐってみろや
肛門栗鼠プー
#: ってどういう意味?
これから井戸に入るかどうか迷っている2人を衛星高度から取った写真(画像処理済み)
ああ、フラクタル圧縮だね。
7 :
デフォルトの名無しさん :05/01/26 06:10:59
【問題001】 1~10までの値を表示せよ
>>7 とりあえずはじめは、簡単にdoで。
(do ((i 1 (+ i 1))) ((> i 10)) (format t "~D~%" i))
(format t "1 2 3 4 5 6 7 8 9 10")
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ
(format t "1~~10までの値~%") (values 1 2 3 4 5 6 7 8 9 10) (dotimes (i 10) (print (1+ i)))
12 :
デフォルトの名無しさん :05/01/26 20:05:04
a
(loop for i from 1 to 10 do (print i))
じゃ、dotimesで (let ((output nil)) (dotimes (x 9 (reverse output)) (setq output (cons (1+ x) output))))
15 :
デフォルトの名無しさん :05/01/27 08:53:20
【問題002】 引数を2倍する関数を作る関数を定義せよ (併せてマクロも) PS:私のLispの知識ってこれくらいで限界なので誰か問題作ってください
>>15 (defun defun-square (sym) (eval `(defun ,sym (x) (* x x))))
(defmacro defsquare (name) `(defun ,name (x) (* x x)))
(defun-square 'foo)
(defsquare bar)
CommonLispには詳しくないので、
defun-squareの方は、もっといいコードがあるのかもしれません。詳しい人、教えて。
2倍せよであって、2乗せよにあらずと思ふ。 (defun make-*2 () (lambda (x) (* 2 x)))
(defun times (n) #'(lambda (x) (* x n))) (defun double (times 2))
(defun double () (times 2)) => DOUBLE (funcall (double) 3) => 6
>>17 あ…、lisp/Schemeといえばsquare関数なので、
その先入観でやっちまいました。ごめんなさい。
xzyyzで (defun func(x) #'(lambda()(* x x)) ) func (setq fff (func 12)) #<lexical-closure: (anonymous)> (funcall fff) 144
【問題003】 リストの終端にあるアトムを返す関数、last-atomを定義せよ。 (last-atom '(1 2 3)) => nil (last-atom '(a b . z)) => z
それはリストの終端にあるアトムとは言わんのじゃないかと思いつつ。 (defun last-atom (lis) (if (consp lis) (last-atom (cdr lis)) lis))
ん? ANSI CLでのdotted listの定義が、a list which has a terminating atom that is not nil. となっているんで、終端のアトムでいいと思ったけど、どこかおかしい?
(defun terminating-atom (list) (if (atom list) list (terminating-atom (cdr list))))
(defun terminating-atom (list) (last list 0))
(defun terminating-atom (list) (loop for (element . rest) on list if (atom rest) do (return rest)))
おれはlast-cdrと銘々するね
reverseにドットペアを突っ込む終端のアトムがもげるのは仕様ですか?
>>30 dotted listは、proper listではないので、仕様ではない。type-errorを発信するのが望ましい。
> Should be prepared to signal an error of type type-error if sequence is not a proper sequence.
【問題004】 引数が循環リストかどうかを判定する関数circular-list-pを定義せよ。 (circular-list-p '#1=(a . #1#)) => true (circular-list-p '(a . #1=(b c . #1#))) => true (circular-list-p '(a b c)) => false
xyzzyで (defun func(x) (if(atom (cdr x)) (cdr x) (func (cdr x)))) func (func '(1 2 . 3)) 3 (func '(1 2 3)) nil
(defun circular-list-p (lis) (do ((うさこ (cdr lis) (cdr (cdr うさこ))) (カメ吉 lis (cdr カメ吉))) ((or (null うさこ) (eq うさこ カメ吉)) (not (null うさこ)))))
>>35 (circular-list-p 'a) -> SIMPLE-TYPE-ERROR [CDR: A is not a LIST]
(circular-list-p '(a . b)) -> SIMPLE-TYPE-ERROR [CDR: B is not a LIST]
>>36 (defun fool-proof-circular-list-p (lis) (ignore-errors (circular-list-p lis)))
【問題005】 (a b (c d(e)))というリストがある。 (rester '(a b (c d(e))) )->(a b c d e) になる関数を定義せよ
(defun rester (x) (if (atom x) x (mapcan #'(lambda (y) (if (atom y) `(,y) (rester y))) x))) (defun rester (x) (loop for y in x if (atom y) collect y else append (rester y))) (defun rester (x) '(a b c d e))
(defun rester (s) (cond ((null s) nil) ((atom s) (list s)) (t (append (rester (car s)) (rester (cdr s))))))
>>40 とほぼ同じだが、こちらのほうが再帰が浅くすむ。
(defun rester (s)
(mapcan #'(lambda (e)
(cond ((null e) nil)
((atom e) (list e))
(t (rester e))))
s))
(defun rester (x) (if (atom x) `(,x) (mapcan #'rester x)))
【問題006】getfの文法は getf plist indicator &optional default => value だが、返り値valueだけでは、indicatorで指定されたプロパティが存在し、 その値がたまたまデフォルト値defaultと同じというケースと、プロパティ自体 が存在しないためデフォルト値が返されたケースの区別をすることは できない。この区別ができるgetfに代わる関数を定義せよ。
(defun getp (plist indicator &optional default) (multiple-value-bind (indicator value tail) (get-properties plist `(,indicator)) (if tail (values value tail) (values default nil))))
【問題007】整数を要素とするリストを引数として受け取り、奇数である要素 だけを集めてリストととして返す関数collect-odd-numbersを定義せよ。
(defun collect-odd-numbers (integers) (cond ((null integers) '()) ((oddp (car integers)) (cons (car integers) (collect-odd-numbers (cdr integers)))) (t (collect-odd-numbers (cdr integers)))))
なんでわざわざ自分でイテレータ書くわけ? 便利関数使えよ そういった楽をすることもスキルのうちでしょ
わざわざ関数にしないだろ、こんなの。 (remove-if 'evenp '(1 2 3 4 5))
【問題008】dotted listの終端のアトムをnilに破壊的操作で書き換える関数chop を書きなはれ。 (defun chop (list) ...) (let ((a (list* 0 1 2 3))) (chop a) a) => (0 1 2)
(chop (list* 0 1 2)) => 2 という仕様がいいんでねぇの?
nilが渡されたらどうすんの?
(defun chop (list) (prog1 (last list 0) (nconc list nil))) (defun chop (list) (let ((last (last list))) (prog1 (cdr last) (when last (rplacd last nil))))) (chop nil) => nil
【問題009】mapcanと同様な操作を非破壊的に行う関数mapappendを定義せよ。
>>53 (defun mapappend (fn &rest lsts) (apply #'append (apply #'mapcar fn lsts)))
【問題010】 a) リストの先頭から要素をn個ずつリストにする関数sliceを定義せよ。 (slice 3 '(1 2 3 4 5 6 7 8 9)) => ((1 2 3) (4 5 6) (7 8 9)) b) リストの先頭から要素を2つずつconsにする関数slice-pairを定義せよ。 (slice-pair '(a b c d e f g h)) => ((a . b) (c . d) (e . f) (g . h)))
>>54 反復子と訳すこともある。今回の場合は「繰り返し処理」くらいの意味。
>>56 (defun slice (n lst)
(labels
((f1 (n)
(if (consp lst)
(if (> n 0)
(cons (car lst)
(progn (setq lst (cdr lst)) (f1 (- n 1)))))))
(f2 () (if (consp lst) (cons (f1 n) (f2)))))
(f2)))
(defun slice-pair (lst)
(if (consp lst)
(cons (cons (car lst) (cadr lst)) (slice-pair (safe-cddr lst)))))
うーん、へたれなので適当ですが。
これでは効率が悪いので、もっときちんとしたものは別の人が書いてちょうだい。
>>56 (defun slice* (f n lis)
(reverse (apply #'mapcar f
(do ((in lis (nthcdr n in))
(out (make-list n) (mapcar #'cons (subseq in 0 n) out)))
((null in) out)))))
(defun slice (n lis) (slice* #'list n lis))
(defun slice-pair (lis) (slice* #'cons 2 lis))
>>59 これ面白いですね。まずn本のリストに要素を分配し、
次にそれを薄くスライスして結果をつくるわけですね。
(defun nthcar (n l) (cond ((null l) nil) ((<= n 0) nil) (t (cons (car l) (nthcar (- n 1) (cdr l)))))) (defun slice (n l) (if (null l) l (cons (nthcar n l) (slice n (nthcdr n l)))))
(defun slice-pair (l) (if (null l) l (let ((p (nthcar 2 l))) (cons (cons (car p) (cadr p)) (slice-pair (nthcdr 2 l)))))) ;; or (defun slice-pair (l) (mapcar (lambda (p) (cons (car p) (cadr p))) (slice 2 l)))
Use the loop, Luke! (defun slice (n list) (loop for list on list by #'(lambda (list) (nthcdr n list)) collect (if (> (length list) n) (subseq list 0 n) list))) (defun slice-pair (list) (loop for (a b) on list by #'cddr collect (cons a b)))
スペースでインデントしても無駄なのね・・・
&nbsp;でインデントすればいいんじゃなかったっけ。 全角スペースと違ってコピペにもやさしい。 と いうわけで テスト。
スペースを に置換すべし。
【問題011】葉が実数である木から最大値を持つ葉を探して返す関数tree-maxを定義せよ。 (tree-max '(1 (2) ((3)) (4 5))) => 5
(defun tree-max (l) (labels ((maxx (a b) (cond ((not (realp a)) b) ((not (realp b)) a) (t (max a b))))) (if (null l) l (let ((i (car l)) (rest (cdr l))) (cond ((realp i) (maxx i (tree-max rest))) ((listp i) (maxx (tree-max i) (tree-max rest))) (t (tree-max rest))))))
(defun tree-max (list) (loop for elt in list if (realp elt) maximizing elt else if (consp elt) maximizing (tree-max elt)))
>>71 (tree-max '(1 . 2)) -> error
(defun tree-max (tree) (if (atom tree) tree (let ((l (tree-max (car tree))) (r (tree-max (cdr tree)))) (if (realp l) (if (realp r) (if (< l r) r l) l) r))))
【問題012】 JAVAやCにおけるfor文と似たようなforを定義してください
もっとちゃんと定義しろよ。問題として不適切。 出題者が出題にふさわしいレベルに達していないと見た。 初心者が自分の使いたいマクロを作って欲しいだけだろ。
(defmacro for (var test step &rest forms) (destructuring-bind (name value) var `(do ((,name ,value ,step)) ((not ,test) nil) ,@forms))) (for (i 0) (< i 10) (1+ i) (print i)) >> 0 >> 1 >> 2 >> 3 >> 4 >> 5 >> 6 >> 7 >> 8 >> 9 => NIL
(丸投げかよ)
>>69 問題5で作った関数にmaxをapplyするのじゃだめなのか?
condなんて元から定義されてるから何もしないのが答え。
>>78 (バカかよ) 仕様書があればそれを使うのが一番いいだろ。
>>79 その場合の損得勘定を説明してみろ。
>>80 その程度しか言えないのなら、だまってろ。
>>81 >
>>78 (バカかよ) 仕様書があればそれを使うのが一番いいだろ。
その理屈でいうと元からあるものはそれを使うのが当然いいわけだが。バカすぎ。
今度やるよ
>> 82 > その理屈でいうと元からあるものはそれを使うのが当然いいわけだが。 論理のすり替えに聞こえます。 condを実装してみたからといって、その俺condをそれ以降使えとは誰も言っていません。 condを実装してみること、それ自体でCommon Lispに習熟するうえでプラスになる ことがあるのではないですか? 言語機能を理解するうえで、自分で実装するとしたら どうするかなと考えてみるのって、けっこう役にたちますよ。
(defun 今度 (s) (cond ((null s) '今度) (t (今度 (cdr (s))))))
>>84 そんなの勝手にやればいいことで、このスレ的に求めることではないと思うが。
早い話013は駄問。
87 :
デフォルトの名無しさん :05/02/10 02:40:16
【問題014】 LISTの初めのelementを消し去る関数を定義してください。 例えば、 >(set x '(a b c)) >(deletecar x) (b c) >x (b c) みたいな。LISPの構造がよく分かる。
なんか偉そうな奴だな。deque作れの方がマシと思うが。
(defmacro cond (&rest clauses) (unless (endp clauses) (let ((clause (first clauses))) (let ((test (first clause)) (forms (rest clause))) (if (endp forms) (let ((result (gensym))) `(let ((,result ,test)) (if ,result ,result (cond ,@(rest clauses))))) `(if ,test (progn ,@forms) (cond ,@(rest clauses)))))))) (defmacro deletecar (place) `(pop ,place)) マクロでもいいでしょ。
>>86 > そんなの勝手にやればいいことで、このスレ的に求めることではないと思うが。
「このスレ的に求められている問題」を一発びしっとお願いします。
(defun deletecar (x) (rplaca x (cadr x)) (rplacd x (cddr x)) x)
でもrplaca, rplacdを使うとなると、例にある >(set x '(a b c)) >(deletecar x) のコンスタントリストをいじくることになるで。
>>87 こんなの普通使う?
偉そうなわりに、実際にやることとやらないことのセンスに無頓着じゃね?
肝心の例でもlisperはやらなさそうなミスしてるし。
>>93 87はLisp初心者のような印象を受けるが、たとえそうだとしても、かまわんだろ。
そんなに偉そうに感じるか? 単なるじゃれあいなんだから、気楽に行こうや。
普通(setq x (cdr x))ですますんじゃない?
96 :
デフォルトの名無しさん :05/02/11 21:57:55
【問題005+】 (a 3 (c d(5)))というリストがある。ここから数字だけを集めて(3 5)を返す number-collectをmapcanを使って書いてください。
(defun collect-if (predicate list) (mapcan #'(lambda (item) (if (consp item) (collect-if predicate item) (when (funcall predicate item) `(,item)))) list)) (defun number-collect (list) (collect-if #'numberp list))
(defun number-collect (list) (mapcan #'list (loop for elt in list if (listp elt) nconc (number-collect elt) else if (numberp elt) collect elt)))
【問題014】 記号に束縛された値でソートする関数を作る。 ex) (setq a 1 b 2 c 3) nbsp;nbsp;nbsp;nbsp;nbsp;(bound-value-sort '(b c a)) -> (a b c) あと、出題者は講評しなくていいの?
100 :
デフォルトの名無しさん :05/02/12 02:33:36
&入れ忘れたしsageてるし。 ex) (setq a 1 b 2 c 3) (bound-value-sort '(b c a)) -> (a b c)
predicate使えないと不便じゃない? (defun bound-value-sort (seq pred) (sort seq #'(lambda (x y) (funcall pred (symbol-value x) (symbol-value y)))))
>>99 出題者は講評しなくていいの?
したい人はすればいいでしょう。
(defun bound-value-sort (sequence predicate)
(sort sequence predicate :key #'symbol-value))
(defun bound-value-sort (sequence &optional (predicate #'<)) (sort sequence predicate :key #'symbol-value))
(bound-value-sort '(b c a))として自作関数を呼び出すのと (sort '(b c a) #'< :key #'symbol-value)という標準関数の呼び出しの場合、 状況にもよるが、俺なら一般的に後者を選ぶかな、字面がすこし長くなるけどね。 そのほうが、ソースの一箇所だけを見て何をしているのかが分かるから。
symbol-value-sortという名前のほうがいいと思います。
:keyなんてキーワード引数があるのか。Commoh Lispの仕様は膨大だな。いやマジで。
107 :
デフォルトの名無しさん :05/02/13 03:48:09
突然、おじゃまします。LISP初心者の者ですが、質問してもよろしいでしょうか? (defun make-adder (n) #'(lambda (x) (+ x n))) ってあって、これを >(setf add3 (make-adder 3))とすると、 >(funcall add3 2) 5 ってなりますよね。 >(funcall add3) って入力したときに、nの値(3)をそのまま返すようにこれを変更するこ とって出来ないでしょうか?
108 :
99 :05/02/13 04:21:10
:keyを使えばよかったのか。自分は、 (mapcan 'list (mapcar 'eval seq) seq) なんてのを属性リストにして値をソートしたものをGETで引いてたんだけれど、 あんまりスマートじゃなかったな。
>>107 何もせずに3を返す関数は? というのを考えれば答えは自明。
(defun make-adder (n) #'(lambda (&optional x) (if (null x) n (+ x n))))
(defun make-adder (n) #'(lambda (&optional (x 0)) (+ x n)))
112 :
デフォルトの名無しさん :05/02/14 00:49:32
>>110 ,111
107です。うまくいきました。解答ありがとうございます。
113 :
デフォルトの名無しさん :05/02/14 05:42:40
ひとつ質問させて頂いてもよろしいでしょうか? (product #'list '(10 30 50) '(a b c)) => ((10 a) (30 a) (50 a) (10 b) (30 b) (50 b) (10 c) (30 c) (50 c)) となる様に定義をしたく (defun prod (procedure ls1 ls2) (do ((copy1 ls1 (rest copy1)) (result '() (cons (funcall procedure (car copy1) (car ls2)) result))) ((endp copy1) (reverse result)))) と何とか書いたのですが、これだと (prod #'list '(1 2 3) '(a b c)) =>((1 A) (2 A) (3 A)) となってしまいます。 2つ目のリストの中もloopさせるにはどの様にしたら良いのでしょうか?
(defun prod (proc lst1 lst2) (mapcan (lambda (x) (mapcar (lambda (y) (funcall proc x y)) lst2)) lst1)) (prod #'list '(1 2 3) '(a b c)) => ((1 a) (1 b) (1 c) (2 a) (2 b) (2 c) (3 a) (3 b) (3 c))
115 :
113 :05/02/14 07:21:25
114さん、素早い回答ありがとうございました。 大変助かりました!!
なんかスレの主旨から外r
ネタ切れぽいね……。 【問題015】 リストの要素の重複を除く関数uniqを作れ。順序の保存は問わない。 引数 :test で同一性を判定する関数を指定できることが望ましい。 (uniq '(a b c d a b x y)) => (a b c d x y) 標準であるかと思って一応探したけど見つかんなかった。もしあったらごめん。
(remove-duplicates '(a b c d a b x y)) => (C D A B X Y) (defun uniq (list &key (test #'eql)) (let ((table (make-hash-table :test test)) (result '())) (dolist (x list) (unless (gethash x table) (push x result) (setf (gethash x table) t))) (nreverse result)))
いつのまにか人が増えてる 【問題016】 特定の型(stringとかinteger)の値しか格納できないリストを定義せよ。
【問題016-a】 「特定の型(stringとかinteger)の値しか格納できないリスト」に 必要なオペレーションを定義せよ。
122 :
デフォルトの名無しさん :05/02/27 16:10:09
終了?
123 :
デフォルトの名無しさん :05/03/02 03:27:38
問題017 ひらがなをカタカナにする関数 (hira-kana "あいうえお") -> "アイウエオ" を定義せよ。入力される文字列はすべてひらがなとみなしてよい。
(defun hira-kana (str) (map 'string (lambda (x) (cdr (assoc x *kana*))) str)) *kana*はこんな感じの平仮名から片仮名へのalist。 (setf *kana* '((#\あ . #\ア) (#\い . #\イ) ...)) 処理系が仮名を一文字として扱えること。
こういうalistのテーブル検索ってコンパイラは最適化するの? 自分でhashテーブルに変えるとかしないとだめ? 商用の処理系とかがどの程度最適化されるのか興味あるんですが。
126 :
123 :05/03/03 03:34:47
(defun hira-kana (str) (concatenate 'string (mapcar #'(lambda (x) (code-char (+ (char-code x) 161))) (concatenate 'list str))))
(hira-kana "ぬるぽ") "ヌリポ" ∧_∧ ( ´∀`) <ぬりぼ
(ぬるぽ)
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←
>>127 nil
>>123 (defun hira-kana (str)
(map 'string #'(lambda (c) (code-char (+ (char-code c) 161))) str))
xyzzy-lispで動作確認。
>>129 ほんとに、ちゃんと確認した?
(hira-kana "ぬるぽ")
ってやってみそ。
全角カナは「ミ」と「ム」の間に謎の一文字があるので その「む」以降は1を足せばいけますよ
そんな特定の文字エンコーディングに依存したものを出されても。
xyzzy限定で良いのなら (defun hira-kana (str) (map 'string #'(lambda (c) (unicode-char (+ (char-unicode c) 96))) str))
135 :
デフォルトの名無しさん :2005/04/03(日) 16:38:19
clispで定義された (defunc func()(print "func"))->func という適当な関数を定義してバイトコンパイルしたものを VC++から呼び出すとか出来ます?パイプでもなんでもいいんですが、 出来ますか?
>>135 defuncだとあまりにも適当すぎるので関数が定義できません。
137 :
デフォルトの名無しさん :2005/04/04(月) 05:24:57
138 :
デフォルトの名無しさん :2005/05/07(土) 14:27:12
defmacro
de marco
(define de define) (define dm define-macro)
python challengeをcommon lispでやってみた人いる?
python challengeは問題が厨房臭い
保守
問題018 リストL=((a b) c (d(e f))) このリストのすべての要素の個数を求めよ。(リスト中のリストの要素をもとめるプログラム)
age
要素ってのが不明瞭だがこうか? (defun mycount (l) (apply #'+ (mapcar (lambda (x) (if (listp x) (mycount x) 1)) l)))
再帰でガシガシ書きそうなところを、mapcar でさらりと1行にまとめるのは、 かっこいいなあ。
150 :
デフォルトの名無しさん :2005/09/22(木) 12:21:28
経路探索のプログラムを教えてください 考えてもまったくわからずに困っているので…
>>150 バックトラックとか動的計画法とかの言葉は知ってる?
152 :
デフォルトの名無しさん :2005/09/25(日) 13:32:48
>>151 ぜんぜんわかりません…
まったくの初心者です
>>150 ,152
だったらマルチポストする前に教科書でも読んで出直して来い。
154 :
デフォルトの名無しさん :2005/09/27(火) 14:36:17
>>153 ある程度基礎は勉強してきました!
お願いします!
微積分を習うのにかけ算も知らないで勉強してきましたといってるようなもので、 まるでお話にならない。もっとまともな勉強して出直しておいで。
156 :
デフォルトの名無しさん :2005/09/27(火) 19:45:08
>>155 専門用語出てきても調べるんで、さらっとでもいいんで
お願いします!
んじゃ経路探索について調べろ。おわり。
>>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 :
デフォルトの名無しさん :
2006/10/13(金) 19:35:47