【入門】Common Lisp その7【質問よろず】

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2011/06/28(火) 02:45:26.54
>>951
(apply #'top3 args)
953デフォルトの名無しさん:2011/06/28(火) 02:46:46.49
ほらよ
(defmacro rm-parens-apply (f arg) (funcall (funcall ((lambda (x) (lambda (y) (lambda (z) `(,x ,@(funcall y z))))) f) 'symbol-value) arg))
(rm-parens-apply top3 args)
954952:2011/06/28(火) 02:50:50.03
>>951
ごめん、結果見直したら、希望と違ってた。
955デフォルトの名無しさん:2011/06/28(火) 02:55:32.33
>>953 変数名にx,y,zという無意味なものを使うな。あと改行入れろ。
(defmacro rm-parens-apply(top3 args)(funcall
(funcall(funcall(lambda(top3)(lambda(symbol-value)
(lambda(args)`(,top3 ,@(funcall symbol-value args)))))top3)'symbol-value)args))
(rm-parens-apply top3 args)
956951:2011/06/28(火) 23:31:40.31
皆さんレスありがとうございます。なるほど、そうすれば良かったのですね。
変数名と改行に気をつけてこう仕上げました。

(      defmacro rm-parens-apply
(      args top3
 )
(         funcall
(         funcall
(         funcall
(         lambda
 (        args
  )
 (        lambda
 (        top3
  )
 (        lambda
  (       symbol-value
   )`
  (,      symbol-value
 ,@
 (        funcall args top3
) ) )
 ) )'     symbol-value
 )        top3
 )        args
) )

(defun top3 (a b c) (format nil "top3 is ~A, ~A, ~A" a b c))
(setq are 'grape args '('apple 'orange are))
(rm-parens-apply top3 args)
;=> "top3 is APPLE, ORANGE, GRAPE"
957デフォルトの名無しさん:2011/06/29(水) 16:44:12.60
ワロタw
958デフォルトの名無しさん:2011/06/29(水) 22:06:03.96
すまねぇ仙人の皆、俺には>>956がLispに見えない。
もっと別の、おぞましい何かにしか…

Lisper的にはPythonのブロックインデントは有り?無し?
959デフォルトの名無しさん:2011/06/29(水) 22:42:17.22
オフサイドルールっぽいけど、全然違う所も評価高いな。
960デフォルトの名無しさん:2011/06/29(水) 23:00:37.77
>>958
pass って書くのめんどいから ) がいい。
961デフォルトの名無しさん:2011/06/29(水) 23:19:32.99
>>958
オフサイドルールについては、Haskellに対してだけど、とても面白い洞察があるよ。

ttp://d.hatena.ne.jp/camlspotter/20101212/1292165692

それ以外の部分も面白いからお勧め。名前空間の部分とか、CLでも参考になる。
962デフォルトの名無しさん:2011/06/29(水) 23:28:09.74
ttp://d.hatena.ne.jp/camlspotter/20100521/1274446264

こっちのが適切だったかも。
963デフォルトの名無しさん:2011/06/30(木) 05:55:58.43
Linux Lispbox設定方法知ってる方いますか?
964デフォルトの名無しさん:2011/06/30(木) 06:15:48.61
Lispboxって設定なんもいらんだろ?
965デフォルトの名無しさん:2011/06/30(木) 06:20:43.51
↑うまく起動できないもので
966デフォルトの名無しさん:2011/06/30(木) 06:46:48.67
>>965
ダウンロードした Lispbox はどれで
使っている Linux は何?

つーか、Linuxならパッケージマネージャで環境整わない?
967デフォルトの名無しさん:2011/06/30(木) 06:54:49.36
わるいこといわん lisp cabinetにしとけ
968デフォルトの名無しさん:2011/06/30(木) 06:57:21.24
そういうときは、行った操作とその結果(エラーメッセージなどの状況)を教えてくれないと、
誰も答えようがない。

ダウンロードした場所、インストールのときに行った操作、どうやって起動したか、
そしてその結果、どのようにうまく起動できなかったのか。例えば、エラーメッセージが出るとか、
エラーメッセージすら出ないとか、コアダンプするとか、そういった情報を書いてくれ。
969デフォルトの名無しさん:2011/06/30(木) 07:01:01.18
Lispbox-0.7
Vine Linux4.1
970デフォルトの名無しさん:2011/06/30(木) 07:01:34.23
Lisp CabinetってWindows専用じゃん。
971デフォルトの名無しさん:2011/06/30(木) 07:18:43.97
ありがとうございました
972デフォルトの名無しさん:2011/06/30(木) 08:14:05.97
Windowsでやっとけよ。
973デフォルトの名無しさん:2011/07/02(土) 12:43:52.17
practical common lispのpdfっていつの間にか無料配布をやめちゃったんだね。
974デフォルトの名無しさん:2011/07/03(日) 14:07:11.81
lispのvimerってあまり見かけないけど、vimerなlispさんにどうぞ
http://gajon.org/common-lisp-development-vim/
slimv ってvimのslime版プラグインはそこそこの出来だよ。ただし、pythonが
必要だが。
975デフォルトの名無しさん:2011/07/04(月) 09:18:27.26
すいません…初心者なので質問させていただきます…。

リストの中の3つの要素が同じかそうでないかをくらべ、同じならその記号を違うならnilを返す関数hikakuを作成してください。

参考書の練習問題を解いていたのですが、わからなかったため質問させていただきました。
ヒントとしては3つのものが同じかどうか判定し、結果には最初のものを返せばよい。
との事ですが…どなたかご存じの方おりましたらよろしくお願い致します。

実行例としては
(hikaku '(x x x)) →X
(hikaku '(x y x)) →nil
(hikaku '(x x nil)) →nil
となっています…。

よろしくお願い致します。
976デフォルトの名無しさん:2011/07/04(月) 10:09:41.86
(defun hikaku (list)
(let ((x (car list)))
(if (remove x list)
nil
x)))
977デフォルトの名無しさん:2011/07/04(月) 10:59:22.27
(defun hikaku (x)
(reduce (lambda (a b) (if (eql a b) a nil))
x))
978デフォルトの名無しさん:2011/07/04(月) 11:06:54.51
>>975
Common Lispには、「同じ」という意味がいくつかあるから注意した方が良いよー。

ttp://www.geocities.jp/m_hiroi/xyzzy_lisp/abclisp03.html

見てね。

>>976とか>>977で解答が出てるけど、要は、最初の要素とそれ以降の要素を比較して、
リストの最後まで一致すれば、最初の要素を返す、一致しないものがあれば、nilを返す、
っていう処理を書けば良い。
979デフォルトの名無しさん:2011/07/04(月) 14:43:23.29
突然失礼しますorz

(setq board '((11 12 13) (21 22 23) (31 32 33)))
といったものが与えられている時、

(11 21 31) を表わす関数xの定義
(12 22 32) を表わす関数yの定義
(13 23 33) を表わす関数zの定義
(11 22 33) を表わす関数aの定義
(31 22 13) を表わす関数bの定義


はどのようにして書けばよいのですか?
appendなどでつなごうとしたのですが上手くいかず困っていますorz
980デフォルトの名無しさん:2011/07/04(月) 14:48:45.01
宿題?
a bはともかく、x y zはmapを使うんだと思うけど。
981デフォルトの名無しさん:2011/07/04(月) 14:53:08.96
>>890
古い参考書に載ってた練習問題です…orz
解説を見ようとしたら中古品だったので解説部分が切り取られてましたT-T
982デフォルトの名無しさん:2011/07/04(月) 14:56:58.90
とりあえず動作例が一つしか与えられてないわけだから、
xの仕様を日本語で書き下してみたら?
983デフォルトの名無しさん:2011/07/04(月) 15:03:09.97
>>982
どのようにして(11 21 31)を取り出すのかさえ分かれば
解けると思うのですが…orz
初心者なので???状態です…。
984デフォルトの名無しさん:2011/07/04(月) 15:13:22.89
>>983
まず、日本語で仕様を書き下す。
次に、それを実現するために必要な関数を調べる。
そして、仕様を言語で書き直す。

さあ、xの仕様を日本語で書き下してみよう。
初心者かどうか関係ない。問題を理解できたかどうかの問題。
985デフォルトの名無しさん:2011/07/04(月) 16:37:58.69
関数xの仕様としては、carしてcarしたものとcdrしてcar したものとcdrしてcdrしてcarしたものをつなげばいいです。

ただその結合が上手くいきません…。
986デフォルトの名無しさん:2011/07/04(月) 17:10:18.20
consはわかってる?
987デフォルトの名無しさん:2011/07/04(月) 17:16:49.96
consとappendとlistの違いがよく分かってないのかね。

(defun list-copy-by-one-level (x) (cons (car x) (cdr x))
(defun list-copy-by-one-level (x) (append (list x) (cdr x))

はconsセルの消費数以外は同じ関数。

(defun list-copy-by-one-level (x) (nconc (list x) (cdr x))

ならconsセルの消費数も同じです。(pure functionalでなくなるが)
x, y, zはこの関数のごく単純なバリエーションにすぎません。
988デフォルトの名無しさん:2011/07/04(月) 18:58:25.57
>>985
>関数xの仕様としては、carしてcarしたものとcdrしてcar したものとcdrしてcdrしてcarしたものをつなげばいいです。

処理系あるなら一回試してみ
あるいはboardをconsだけで書いてみるといいよ
989デフォルトの名無しさん:2011/07/05(火) 01:15:13.78
誰ぞ次スレを
990デフォルトの名無しさん:2011/07/05(火) 18:09:12.44
>>946
Hunchentoot
そんなに使われてる?
991デフォルトの名無しさん:2011/07/05(火) 18:14:36.52
スレが立ってから15か月になるのか...
992デフォルトの名無しさん:2011/07/05(火) 19:22:49.48
>>990
とりあえず、私的に実験的なページだとHunchentootつかうかな
parenscriptあたりもlispのりで書けるし...
993 忍法帖【Lv=3,xxxP】 :2011/07/05(火) 20:07:19.94
>>990
元のレスは「Hunchentootで普通にスレッド使いまくり」って意味だけど、
Hunchentoot自体も普通に使われてると思うよ。
だって、まともにメンテされてんのがHunchentootくらいだし。
994デフォルトの名無しさん:2011/07/06(水) 16:35:27.80
cl-lexの使い方の例ってどこかにないのでしょうか
995 忍法帖【Lv=10,xxxPT】 :2011/07/06(水) 17:17:00.89
次スレ
http://hibari.2ch.net/test/read.cgi/tech/1309940115/l50
テンプレとか、よろしく。
996 忍法帖【Lv=4,xxxP】 :2011/07/06(水) 19:53:00.47
丸投げすんなよー。テンプレ貼るのめんどいんだよー。貼っといたけどさ。スレ立て乙。

>>994
ttp://d.hatena.ne.jp/einblicker/20101114/1289691118
997デフォルトの名無しさん:2011/07/06(水) 20:41:11.83
お疲れさまでした
うめ
998デフォルトの名無しさん:2011/07/06(水) 21:16:11.87
ぼんやり読んでたら>>991をスレが立ってから15年と読んで混乱した
ともあれ乙
999デフォルトの名無しさん:2011/07/07(木) 00:08:40.08
>>990
以前はプロトタイプのweb作るのに使ってた(あと管理系のwebツール)
いまはclojure+compojureの方が書きやすいと思うようになっちゃった

1000デフォルトの名無しさん:2011/07/07(木) 00:15:57.48
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。