【一日】CommonLisp【一門】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
05/01/25 02:25:15・本スレに敬意を持つこと
・lisp最強
・括弧を崇めろ
・初心者を馬鹿にしない
・人に優しく
0002デフォルトの名無しさん
05/01/25 02:27:43くぐってみろや
0003デフォルトの名無しさん
05/01/25 02:35:340004デフォルトの名無しさん
05/01/25 06:02:070005デフォルトの名無しさん
05/01/25 11:36:220006デフォルトの名無しさん
05/01/25 11:48:190007デフォルトの名無しさん
05/01/26 06:10:591~10までの値を表示せよ
0008デフォルトの名無しさん
05/01/26 14:29:23とりあえずはじめは、簡単にdoで。
(do ((i 1 (+ i 1))) ((> i 10)) (format t "~D~%" i))
0009デフォルトの名無しさん
05/01/26 17:22:270010書けませんよ。。。&rlo;止停:&lro;
05/01/26 18:17:330011デフォルトの名無しさん
05/01/26 20:04:56(values 1 2 3 4 5 6 7 8 9 10)
(dotimes (i 10) (print (1+ i)))
0012デフォルトの名無しさん
05/01/26 20:05:040013デフォルトの名無しさん
05/01/26 20:06:430014デフォルトの名無しさん
05/01/27 00:10:39(let ((output nil))
(dotimes (x 9 (reverse output))
(setq output (cons (1+ x) output))))
0015デフォルトの名無しさん
05/01/27 08:53:20引数を2倍する関数を作る関数を定義せよ
(併せてマクロも)
PS:私のLispの知識ってこれくらいで限界なので誰か問題作ってください
0016デフォルトの名無しさん
05/01/27 09:58:21(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の方は、もっといいコードがあるのかもしれません。詳しい人、教えて。
0017デフォルトの名無しさん
05/01/27 10:14:34(defun make-*2 ()
(lambda (x) (* 2 x)))
0018デフォルトの名無しさん
05/01/27 10:16:01(defun double (times 2))
0019デフォルトの名無しさん
05/01/27 10:18:30(funcall (double) 3) => 6
0021デフォルトの名無しさん
05/01/27 10:38:55せめて100門ぐらい作ってから言え
0022デフォルトの名無しさん
05/01/27 10:53:11(defun func(x)
#'(lambda()(* x x))
)
func
(setq fff (func 12))
#<lexical-closure: (anonymous)>
(funcall fff)
144
0023デフォルトの名無しさん
05/01/27 21:54:11リストの終端にあるアトムを返す関数、last-atomを定義せよ。
(last-atom '(1 2 3)) => nil
(last-atom '(a b . z)) => z
0024デフォルトの名無しさん
05/01/27 21:57:10(defun last-atom (lis) (if (consp lis) (last-atom (cdr lis)) lis))
0025デフォルトの名無しさん
05/01/27 22:04:31となっているんで、終端のアトムでいいと思ったけど、どこかおかしい?
0026デフォルトの名無しさん
05/01/27 22:08:49(if (atom list)
list
(terminating-atom (cdr list))))
0027デフォルトの名無しさん
05/01/27 22:10:330028デフォルトの名無しさん
05/01/27 22:15:38(loop for (element . rest) on list
if (atom rest) do (return rest)))
0029デフォルトの名無しさん
05/01/27 23:49:520030デフォルトの名無しさん
05/01/28 02:19:030031デフォルトの名無しさん
05/01/28 02:28:41どうあるべきと思っているの?
0032デフォルトの名無しさん
05/01/28 07:35:11> Should be prepared to signal an error of type type-error if sequence is not a proper sequence.
0033デフォルトの名無しさん
05/01/28 13:40:30引数が循環リストかどうかを判定する関数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
0034デフォルトの名無しさん
05/01/28 14:04:26(defun func(x)
(if(atom (cdr x)) (cdr x)
(func (cdr x))))
func
(func '(1 2 . 3))
3
(func '(1 2 3))
nil
0035デフォルトの名無しさん
05/01/28 16:20:02(do ((うさこ (cdr lis) (cdr (cdr うさこ)))
(カメ吉 lis (cdr カメ吉)))
((or (null うさこ)
(eq うさこ カメ吉))
(not (null うさこ)))))
0036デフォルトの名無しさん
05/01/28 21:20:57(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]
0037デフォルトの名無しさん
05/01/29 00:29:15(defun fool-proof-circular-list-p (lis) (ignore-errors (circular-list-p lis)))
0038デフォルトの名無しさん
05/01/29 07:41:33(a b (c d(e)))というリストがある。
(rester '(a b (c d(e))) )->(a b c d e)
になる関数を定義せよ
0039デフォルトの名無しさん
05/01/29 10:17:12(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))
0040デフォルトの名無しさん
05/01/30 03:19:58(cond ((null s) nil)
((atom s) (list s))
(t (append (rester (car s))
(rester (cdr s))))))
0041デフォルトの名無しさん
05/01/30 03:23:41(defun rester (s)
(mapcan #'(lambda (e)
(cond ((null e) nil)
((atom e) (list e))
(t (rester e))))
s))
0042デフォルトの名無しさん
05/01/30 05:50:34(if (atom x)
`(,x)
(mapcan #'rester x)))
0043デフォルトの名無しさん
05/01/30 12:46:16だが、返り値valueだけでは、indicatorで指定されたプロパティが存在し、
その値がたまたまデフォルト値defaultと同じというケースと、プロパティ自体
が存在しないためデフォルト値が返されたケースの区別をすることは
できない。この区別ができるgetfに代わる関数を定義せよ。
0044デフォルトの名無しさん
05/01/31 09:37:47(multiple-value-bind (indicator value tail)
(get-properties plist `(,indicator))
(if tail
(values value tail)
(values default nil))))
0045デフォルトの名無しさん
05/02/01 08:21:18だけを集めてリストととして返す関数collect-odd-numbersを定義せよ。
0046デフォルトの名無しさん
05/02/01 14:14:07(cond
((null integers) '())
((oddp (car integers))
(cons (car integers) (collect-odd-numbers (cdr integers))))
(t (collect-odd-numbers (cdr integers)))))
0047デフォルトの名無しさん
05/02/01 17:22:03便利関数使えよ
そういった楽をすることもスキルのうちでしょ
0048デフォルトの名無しさん
05/02/01 18:18:57(remove-if 'evenp '(1 2 3 4 5))
0049デフォルトの名無しさん
05/02/01 21:57:57を書きなはれ。
(defun chop (list) ...)
(let ((a (list* 0 1 2 3)))
(chop a)
a) => (0 1 2)
0050デフォルトの名無しさん
05/02/01 22:18:420051デフォルトの名無しさん
05/02/02 01:27:520052デフォルトの名無しさん
05/02/02 08:48:38(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
0053デフォルトの名無しさん
05/02/03 09:52:010054デフォルトの名無しさん
05/02/03 20:19:550055デフォルトの名無しさん
05/02/04 00:21:14(defun mapappend (fn &rest lsts) (apply #'append (apply #'mapcar fn lsts)))
0056デフォルトの名無しさん
05/02/04 03:12:18a) リストの先頭から要素を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)))
0057デフォルトの名無しさん
05/02/04 08:36:360058デフォルトの名無しさん
05/02/04 10:37:31(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)))))
うーん、へたれなので適当ですが。
これでは効率が悪いので、もっときちんとしたものは別の人が書いてちょうだい。
0059デフォルトの名無しさん
05/02/04 11:30:14(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))
0060デフォルトの名無しさん
05/02/04 12:52:59これ面白いですね。まずn本のリストに要素を分配し、
次にそれを薄くスライスして結果をつくるわけですね。
0061デフォルトの名無しさん
05/02/05 03:19:570062デフォルトの名無しさん
05/02/05 07:57:14(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)))))
0063デフォルトの名無しさん
05/02/05 08:09:02(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)))
0064デフォルトの名無しさん
05/02/05 13:09:39(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)))
0065デフォルトの名無しさん
05/02/06 04:58:170066デフォルトの名無しさん
05/02/06 09:37:44全角スペースと違ってコピペにもやさしい。
と
いうわけで
テスト。
0067デフォルトの名無しさん
05/02/06 09:38:240069デフォルトの名無しさん
05/02/06 09:49:19(tree-max '(1 (2) ((3)) (4 5))) => 5
0070デフォルトの名無しさん
05/02/06 11:19:51(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))))))
0071デフォルトの名無しさん
05/02/06 13:46:54(loop for elt in list
if (realp elt) maximizing elt
else if (consp elt) maximizing (tree-max elt)))
0072デフォルトの名無しさん
05/02/06 13:56:220073デフォルトの名無しさん
05/02/06 14:01:37(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))))
0074デフォルトの名無しさん
05/02/09 01:47:45JAVAやCにおけるfor文と似たようなforを定義してください
0075デフォルトの名無しさん
05/02/09 03:02:50出題者が出題にふさわしいレベルに達していないと見た。
初心者が自分の使いたいマクロを作って欲しいだけだろ。
0076デフォルトの名無しさん
05/02/09 12:40:41(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
0077デフォルトの名無しさん
05/02/09 15:45:23http://www.lispworks.com/documentation/HyperSpec/Body/m_cond.htm
0078デフォルトの名無しさん
05/02/09 22:38:040079デフォルトの名無しさん
05/02/09 22:40:390080デフォルトの名無しさん
05/02/09 22:52:550081デフォルトの名無しさん
05/02/09 22:59:37>>79 その場合の損得勘定を説明してみろ。
>>80 その程度しか言えないのなら、だまってろ。
0082デフォルトの名無しさん
05/02/09 23:15:05> >>78 (バカかよ) 仕様書があればそれを使うのが一番いいだろ。
その理屈でいうと元からあるものはそれを使うのが当然いいわけだが。バカすぎ。
0083デフォルトの名無しさん
05/02/09 23:19:130084デフォルトの名無しさん
05/02/09 23:27:23> その理屈でいうと元からあるものはそれを使うのが当然いいわけだが。
論理のすり替えに聞こえます。
condを実装してみたからといって、その俺condをそれ以降使えとは誰も言っていません。
condを実装してみること、それ自体でCommon Lispに習熟するうえでプラスになる
ことがあるのではないですか? 言語機能を理解するうえで、自分で実装するとしたら
どうするかなと考えてみるのって、けっこう役にたちますよ。
0085デフォルトの名無しさん
05/02/09 23:32:30(cond ((null s) '今度)
(t (今度 (cdr (s))))))
0086デフォルトの名無しさん
05/02/10 00:49:20そんなの勝手にやればいいことで、このスレ的に求めることではないと思うが。
早い話013は駄問。
0087デフォルトの名無しさん
05/02/10 02:40:16LISTの初めのelementを消し去る関数を定義してください。
例えば、
>(set x '(a b c))
>(deletecar x)
(b c)
>x
(b c)
みたいな。LISPの構造がよく分かる。
0088デフォルトの名無しさん
05/02/10 03:54:410089デフォルトの名無しさん
05/02/10 07:13:10(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))
マクロでもいいでしょ。
0090デフォルトの名無しさん
05/02/10 07:15:31> そんなの勝手にやればいいことで、このスレ的に求めることではないと思うが。
「このスレ的に求められている問題」を一発びしっとお願いします。
0091デフォルトの名無しさん
05/02/10 07:20:39(rplaca x (cadr x))
(rplacd x (cddr x))
x)
0092デフォルトの名無しさん
05/02/10 07:34:36>(set x '(a b c))
>(deletecar x)
のコンスタントリストをいじくることになるで。
0093デフォルトの名無しさん
05/02/10 08:44:29こんなの普通使う?
偉そうなわりに、実際にやることとやらないことのセンスに無頓着じゃね?
肝心の例でもlisperはやらなさそうなミスしてるし。
0094デフォルトの名無しさん
05/02/10 09:18:30そんなに偉そうに感じるか? 単なるじゃれあいなんだから、気楽に行こうや。
0095デフォルトの名無しさん
05/02/10 11:37:150096デフォルトの名無しさん
05/02/11 21:57:55(a 3 (c d(5)))というリストがある。ここから数字だけを集めて(3 5)を返す
number-collectをmapcanを使って書いてください。
0097デフォルトの名無しさん
05/02/11 23:51:36(mapcan #'(lambda (item)
(if (consp item)
(collect-if predicate item)
(when (funcall predicate item)
`(,item))))
list))
(defun number-collect (list) (collect-if #'numberp list))
0098デフォルトの名無しさん
05/02/11 23:57:36(mapcan #'list (loop for elt in list
if (listp elt) nconc (number-collect elt)
else if (numberp elt) collect elt)))
0099デフォルトの名無しさん
05/02/12 02:31:51記号に束縛された値でソートする関数を作る。
ex) (setq a 1 b 2 c 3)
nbsp;nbsp;nbsp;nbsp;nbsp;(bound-value-sort '(b c a)) -> (a b c)
あと、出題者は講評しなくていいの?
0100デフォルトの名無しさん
05/02/12 02:33:36ex) (setq a 1 b 2 c 3)
(bound-value-sort '(b c a)) -> (a b c)
0101デフォルトの名無しさん
05/02/12 03:40:36(defun bound-value-sort (seq pred)
(sort seq
#'(lambda (x y)
(funcall pred (symbol-value x) (symbol-value y)))))
0102デフォルトの名無しさん
05/02/12 07:48:29したい人はすればいいでしょう。
(defun bound-value-sort (sequence predicate)
(sort sequence predicate :key #'symbol-value))
0103デフォルトの名無しさん
05/02/12 07:59:22(sort sequence predicate :key #'symbol-value))
0104デフォルトの名無しさん
05/02/12 08:14:46(sort '(b c a) #'< :key #'symbol-value)という標準関数の呼び出しの場合、
状況にもよるが、俺なら一般的に後者を選ぶかな、字面がすこし長くなるけどね。
そのほうが、ソースの一箇所だけを見て何をしているのかが分かるから。
0105デフォルトの名無しさん
05/02/12 08:32:230106デフォルトの名無しさん
05/02/12 22:00:210107デフォルトの名無しさん
05/02/13 03:48:09(defun make-adder (n)
#'(lambda (x) (+ x n)))
ってあって、これを
>(setf add3 (make-adder 3))とすると、
>(funcall add3 2)
5
ってなりますよね。
>(funcall add3)
って入力したときに、nの値(3)をそのまま返すようにこれを変更するこ
とって出来ないでしょうか?
010899
05/02/13 04:21:10(mapcan 'list (mapcar 'eval seq) seq)
なんてのを属性リストにして値をソートしたものをGETで引いてたんだけれど、
あんまりスマートじゃなかったな。
0109デフォルトの名無しさん
05/02/13 04:36:13何もせずに3を返す関数は? というのを考えれば答えは自明。
0110デフォルトの名無しさん
05/02/13 05:02:23#'(lambda (&optional x) (if (null x) n (+ x n))))
0111デフォルトの名無しさん
05/02/13 12:16:49#'(lambda (&optional (x 0)) (+ x n)))
0112デフォルトの名無しさん
05/02/14 00:49:32107です。うまくいきました。解答ありがとうございます。
0113デフォルトの名無しさん
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させるにはどの様にしたら良いのでしょうか?
0114デフォルトの名無しさん
05/02/14 06:41:25(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))
0115113
05/02/14 07:21:25大変助かりました!!
0116デフォルトの名無しさん
05/02/15 02:38:520117デフォルトの名無しさん
05/02/17 13:17:18【問題015】
リストの要素の重複を除く関数uniqを作れ。順序の保存は問わない。
引数 :test で同一性を判定する関数を指定できることが望ましい。
(uniq '(a b c d a b x y)) => (a b c d x y)
標準であるかと思って一応探したけど見つかんなかった。もしあったらごめん。
0118デフォルトの名無しさん
05/02/17 14:19:39(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)))
0119デフォルトの名無しさん
05/02/22 06:32:30【問題016】
特定の型(stringとかinteger)の値しか格納できないリストを定義せよ。
0120デフォルトの名無しさん
05/02/22 09:50:46「特定の型(stringとかinteger)の値しか格納できないリスト」に
必要なオペレーションを定義せよ。
0121デフォルトの名無しさん
05/02/22 11:14:14gj
0122デフォルトの名無しさん
05/02/27 16:10:090123デフォルトの名無しさん
05/03/02 03:27:38ひらがなをカタカナにする関数
(hira-kana "あいうえお") -> "アイウエオ"
を定義せよ。入力される文字列はすべてひらがなとみなしてよい。
0124デフォルトの名無しさん
05/03/02 14:36:28(map 'string (lambda (x) (cdr (assoc x *kana*))) str))
*kana*はこんな感じの平仮名から片仮名へのalist。
(setf *kana* '((#\あ . #\ア) (#\い . #\イ) ...))
処理系が仮名を一文字として扱えること。
0125デフォルトの名無しさん
05/03/02 19:08:54自分でhashテーブルに変えるとかしないとだめ?
商用の処理系とかがどの程度最適化されるのか興味あるんですが。
0126123
05/03/03 03:34:47(concatenate 'string
(mapcar #'(lambda (x)
(code-char (+ (char-code x) 161)))
(concatenate 'list str))))
0127デフォルトの名無しさん
05/03/03 05:30:50"ヌリポ"
∧_∧
( ´∀`) <ぬりぼ
0128デフォルトの名無しさん
05/03/05 01:45:22( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←>>127
nil
0129デフォルトの名無しさん
05/03/05 08:54:48(defun hira-kana (str)
(map 'string #'(lambda (c) (code-char (+ (char-code c) 161))) str))
xyzzy-lispで動作確認。
0130デフォルトの名無しさん
05/03/05 09:41:14ほんとに、ちゃんと確認した?
(hira-kana "ぬるぽ")
ってやってみそ。
0132デフォルトの名無しさん
05/03/18 03:17:28その「む」以降は1を足せばいけますよ
0133デフォルトの名無しさん
05/03/18 05:30:350134デフォルトの名無しさん
05/03/19 01:57:01(defun hira-kana (str)
(map 'string #'(lambda (c) (unicode-char (+ (char-unicode c) 96))) str))
0135デフォルトの名無しさん
2005/04/03(日) 16:38:19(defunc func()(print "func"))->func
という適当な関数を定義してバイトコンパイルしたものを
VC++から呼び出すとか出来ます?パイプでもなんでもいいんですが、
出来ますか?
0136デフォルトの名無しさん
2005/04/03(日) 23:34:00defuncだとあまりにも適当すぎるので関数が定義できません。
0138デフォルトの名無しさん
2005/05/07(土) 14:27:120139デフォルトの名無しさん
2005/05/08(日) 13:19:260140デフォルトの名無しさん
2005/05/08(日) 22:08:11(define dm define-macro)
0141デフォルトの名無しさん
2005/05/08(日) 22:32:440142デフォルトの名無しさん
2005/05/08(日) 22:45:530143デフォルトの名無しさん
2005/05/28(土) 19:31:120144デフォルトの名無しさん
2005/06/24(金) 17:46:15リストL=((a b) c (d(e f)))
このリストのすべての要素の個数を求めよ。(リスト中のリストの要素をもとめるプログラム)
0145デフォルトの名無しさん
2005/06/24(金) 17:47:090146デフォルトの名無しさん
2005/06/24(金) 18:07:00(defun mycount (l)
(apply #'+ (mapcar (lambda (x) (if (listp x) (mycount x) 1)) l)))
0147デフォルトの名無しさん
2005/06/26(日) 17:54:14かっこいいなあ。
0148デフォルトの名無しさん
2005/06/28(火) 16:37:22乙。
0149デフォルトの名無しさん
2005/09/17(土) 07:32:19ttp://www.python.jp/Zope/articles/SoftwareTools
0150デフォルトの名無しさん
2005/09/22(木) 12:21:28考えてもまったくわからずに困っているので…
0151デフォルトの名無しさん
2005/09/22(木) 21:40:56バックトラックとか動的計画法とかの言葉は知ってる?
0152デフォルトの名無しさん
2005/09/25(日) 13:32:48ぜんぜんわかりません…
まったくの初心者です
0153デフォルトの名無しさん
2005/09/25(日) 15:00:29だったらマルチポストする前に教科書でも読んで出直して来い。
0154デフォルトの名無しさん
2005/09/27(火) 14:36:17ある程度基礎は勉強してきました!
お願いします!
0155デフォルトの名無しさん
2005/09/27(火) 15:10:48まるでお話にならない。もっとまともな勉強して出直しておいで。
0156デフォルトの名無しさん
2005/09/27(火) 19:45:08専門用語出てきても調べるんで、さらっとでもいいんで
お願いします!
0157デフォルトの名無しさん
2005/09/27(火) 19:59:400158デフォルトの名無しさん
2005/09/28(水) 04:13:23> 専門用語出てきても調べるんで、
>>151 を調べるといい。
あるいはその前に深さ優先探索と幅優先探索あたり?
ここで返事を待つより Google で出てきたのを上から順番に読んでった方が多分早いよ。
つまり、私や他の誰かが、どれくらいかも判らないあなたのレベルに合わせて
説明をひねり出すより、あなたが自分のレベルにあった説明を探した方が早いよ。
少なくとも何かを読んであなた自身が判ったか判らなかったかはあなたには判るんだから。
……ていうか別にこれ Common Lisp 固有の話題じゃあないじゃないか。
0159デフォルトの名無しさん
2005/11/03(木) 22:50:40与えられた集合のべき集合を求める関数powersetを定義せよ。
(powerset '(a b c))
=> (() (a) (b) (c) (a b) (b c) (c a) (a b c))
0160デフォルトの名無しさん
2005/11/03(木) 23:02:10集合だから順序は不問だよね。
(defun power (x)
(if (null x)
'(nil)
(let ((y (power (cdr x))))
(append y (mapcar #'(lambda (z) (cons (car x) z)) y)))))
0161デフォルトの名無しさん
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)))))
0162デフォルトの名無しさん
2005/11/05(土) 13:05:33(fold (lambda (y z) (fold (lambda (a b) (cons (cons y a) (cons a b))) '() z)) '(()) x)
0163デフォルトの名無しさん
2005/11/05(土) 14:24:410164デフォルトの名無しさん
2005/11/05(土) 14:35:01異教徒
0165デフォルトの名無しさん
2005/11/05(土) 19:40:18* 引数の名前に lis lst のように間数名とかぶらない不自然な名前を使う
Common Lisp では変数と関数は名前空間を共有してないのにね
* 繰り返しを使わず labels & 末尾再帰
Common Lisp は末尾呼び出しの最適化を保証してないよ
* SRFI の手続き (特に SRFI-1) を使う
SRFI 等の外部モジュールを使う方法は R5RS では定義されてないじゃない
0166デフォルトの名無しさん
2005/11/05(土) 19:50:45* lambda 式の前の #' を省略する。
(ANSI Common Lisp では OK になったが古くからの信徒は #' を省略しない)
0167デフォルトの名無しさん
2005/11/05(土) 20:20:05それだと多くの処理系の作成にも異教徒が入り込んでることになるが
0168デフォルトの名無しさん
2005/11/05(土) 20:55:08処理系は異教徒表記を受け入れる(受け入れなければANSI違反なので)が、
多くの処理系作成者は自分でプログラムを書くときには #' を省略しない。
Common Lisp教は寛容なので異教徒にも優しくしてやっているのだ。
0169デフォルトの名無しさん
2005/11/05(土) 21:11:53じゃなくて、処理系自体の実装で #' が省略されてるのが多々あるってこと
0170デフォルトの名無しさん
2005/11/06(日) 01:36:51逆にそうでないとわかるものを使うときに#'を入れるか、lambda自体をdefmacroする。
0171デフォルトの名無しさん
2005/11/11(金) 14:11:53(COND ((NULL S)0)
((ATOM S)1)
(T(MAX(ADD1(MYSTERY(CAR S)))
(MYSTERY(CDR S))))))
0172デフォルトの名無しさん
2005/11/13(日) 12:55:260173デフォルトの名無しさん
2005/11/14(月) 00:34:270174デフォルトの名無しさん
2006/01/03(火) 07:31:25【2ch に Lisp コードを貼付ける時用の pprint】
仕様:
- 関数またはマクロとして実装
- 整形対象のプログラムは quote して、引数として渡す
- pprint を通す
- 出力は小文字で
- 行頭スペースは & n b s p ; に変換する
- 行幅は適当
- あと何か思いついたら付け足す
0175デフォルトの名無しさん
2006/01/03(火) 15:13:17いいんだけど、elispで書いちゃったからここには貼れないなw
0176デフォルトの名無しさん
2006/02/26(日) 12:59:350177デフォルトの名無しさん
2006/02/28(火) 23:38:470178デフォルトの名無しさん
2006/03/01(水) 16:05:09emacs の abbrev/dabbrev 使っているから別に
0179デフォルトの名無しさん
2006/03/01(水) 16:25:47`(lambda ,@body))
ってやったら怒られた。いまは反省している。
0180デフォルトの名無しさん
2006/03/04(土) 03:37:12`(lambda ,@body))
だろ。
0181デフォルトの名無しさん
2006/03/04(土) 04:51:08ついてる処理系ってあるの?
0182デフォルトの名無しさん
2006/03/04(土) 12:56:53Common Lisp の標準。readtable-case あたりを調べるべし。
個人的には :invert を常用している。
0183デフォルトの名無しさん
2006/03/04(土) 13:18:45標準の設定が
読み込み時: 大文字に揃える
出力時: 大文字に揃える
になってるだけ.(setf (readtable-case *readtable*) :preserve) ってすりゃ
大文字小文字区別できるよ.ただし標準の CL の変数や関数はすべて大文字な
のでCAR とか *READTABLE* とか書く必要がでてくるのでダル.:invert すると
symbol-name とかがいけてない.
Allegro のような使い心地のは CLISP の -modern モードかな?標準の組み込
みのシンボル小文字で,大文字小文字は区別.かつ,パッケージ毎に切り替え
られる.
0184デフォルトの名無しさん
2006/03/05(日) 23:21:36まだまだ知らないことが沢山……
0185デフォルトの名無しさん
2006/03/18(土) 18:38:470186デフォルトの名無しさん
2006/04/07(金) 00:46:230187デフォルトの名無しさん
2006/04/07(金) 01:35:140188デフォルトの名無しさん
2006/04/07(金) 02:37:48http://www.densei-lambda.com/indexj.html
0189デフォルトの名無しさん
2006/04/07(金) 03:01:09λパワーだったりλアメリカだったりλアンテナだったり・・・。
0190デフォルトの名無しさん
2006/04/07(金) 11:57:490191デフォルトの名無しさん
2006/04/08(土) 00:38:350192デフォルトの名無しさん
2006/04/08(土) 01:43:180193デフォルトの名無しさん
2006/04/18(火) 13:10:440194デフォルトの名無しさん
2006/06/24(土) 14:03:41> 三菱車ギャランΛ。
年齢バレますよ。オレモナー
0195デフォルトの名無しさん
2006/07/21(金) 15:53:340196デフォルトの名無しさん
2006/07/22(土) 19:13:31P(n,k)=n!/k! 通りの順列を作ることができます。
P(n,k)通りの順列を全て含んでいる長さP(n,k)の円順列を作るには
どうすれば良いのでしょうか?
0197デフォルトの名無しさん
2006/07/22(土) 19:15:470198デフォルトの名無しさん
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 で検索しましたが…。来週の水曜日に数学の先生にでも聞いてみようかなぁ。
0199デフォルトの名無しさん
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#)
みたいな関数を作れってこと?
まあいかにも宿題っぽくはある。
0200デフォルトの名無しさん
2006/07/23(日) 12:00:420201デフォルトの名無しさん
2006/07/23(日) 16:10:48間違い
P(n,k)=n!/(n-k)!
それから答えは以下の等式をじっとにらむと
見つかるかもしれない
P(n,k)=P(n-1,k)+P(n-1,k-1)*k
0202デフォルトの名無しさん
2006/08/13(日) 01:13:400203デフォルトの名無しさん
2006/09/18(月) 04:04:350204デフォルトの名無しさん
2006/09/29(金) 23:17:44http://book.mycom.co.jp/book/4-8399-2081-8/4-8399-2081-8.shtml
0205デフォルトの名無しさん
2006/10/13(金) 19:34:350206デフォルトの名無しさん
2006/10/13(金) 19:35:47■ このスレッドは過去ログ倉庫に格納されています