トップページ⇒tech
1001コメント315KB

Lisp Scheme Part25

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2009/01/13(火) 23:16:33
※ ここはCommon Lisp、SchemeをはじめとするLisp族全般のスレです ※

Part24: ttp://pc11.2ch.net/test/read.cgi/tech/1224939205/
Part23: ttp://pc11.2ch.net/test/read.cgi/tech/1215875388/
Part22: ttp://pc11.2ch.net/test/read.cgi/tech/1211381920/
Part21: ttp://pc11.2ch.net/test/read.cgi/tech/1207300697/
Part20: ttp://pc11.2ch.net/test/read.cgi/tech/1205021786/
Part19: ttp://pc11.2ch.net/test/read.cgi/tech/1200237296/
Part18: ttp://pc11.2ch.net/test/read.cgi/tech/1186922295/
Part17: ttp://pc11.2ch.net/test/read.cgi/tech/1177065699/
Part16: ttp://pc11.2ch.net/test/read.cgi/tech/1172404795/
Part15: ttp://pc10.2ch.net/test/read.cgi/tech/1151025773/
Part14: ttp://pc8.2ch.net/test/read.cgi/tech/1132275726/
Part13: ttp://pc8.2ch.net/test/read.cgi/tech/1115901841/
Part12: ttp://pc8.2ch.net/test/read.cgi/tech/1100229366/
Part11: ttp://pc5.2ch.net/test/read.cgi/tech/1091456033/
Part10: ttp://pc5.2ch.net/test/read.cgi/tech/1075630259/
Part09: ttp://pc2.2ch.net/test/read.cgi/tech/1069594582/
Part08: ttp://pc5.2ch.net/tech/kako/1058/10582/1058263391.html
Part07: ttp://pc5.2ch.net/tech/kako/1042/10421/1042167213.html
Part06: ttp://pc3.2ch.net/tech/kako/1031/10315/1031560687.html
Part05: ttp://pc3.2ch.net/tech/kako/1023/10230/1023091882.html
Part04: ttp://pc.2ch.net/tech/kako/1016/10162/1016211619.html
Part03: ttp://pc.2ch.net/tech/kako/1008/10082/1008220265.html
Part02: ttp://pc.2ch.net/tech/kako/1002/10025/1002584344.html
Part01: ttp://piza2.2ch.net/tech/kako/987/987169286.html
0153デフォルトの名無しさん2009/02/03(火) 23:52:11
>>152
>>それからR5RSのmapは返り値の順序は規定されているけど
>>評価順序は未規定

うわ…これ今ごろ知ったよ、ありがとう。つかこの仕様で誰が得するんだろ。
慌てて調べたけど、Gauche は独自仕様で常にリスト内の順番どおり、なのね。
ちょっと安心。
0154デフォルトの名無しさん2009/02/04(水) 00:06:16
並列処理が楽になるとは聞いたな。
0155デフォルトの名無しさん2009/02/04(水) 12:25:14
少しActorも意識してるんだろうね。
各要素に並行にfがメッセージパッシングされて。

>>138
funarg問題の時代までタイムスリップかよ。

0156デフォルトの名無しさん2009/02/04(水) 13:04:44
funarg問題の例: compose
(lambda (f g) '(lambda (x) (f (g x))))

こうすればいいんじゃないの?
(lambda (f g) `(lambda (x) (,f (,g x))))
0157デフォルトの名無しさん2009/02/04(水) 22:50:12
quoteが嫌いな人はクロージャやsyntax-rulesを使う
quoteが大嫌いな人はPythonやRubyを使う
そんな気がする
0158デフォルトの名無しさん2009/02/05(木) 00:05:31
quasi-quoteの便利さは異常。
そんな嫌いになるなんて、これが本当のくぉーつ嫌いってやつか・・・
0159デフォルトの名無しさん2009/02/05(木) 00:51:16
昔のマクロにはバッククォートなんてなかったよな
ひたすらlistでS式をこさえてたっけw
0160デフォルトの名無しさん2009/02/05(木) 03:32:58
どんだけ昔の人だよ
0161デフォルトの名無しさん2009/02/05(木) 03:40:10
Lisp-85とかって言っても分からんだろうなw
0162デフォルトの名無しさん2009/02/05(木) 03:53:31
そんな最近かよ
とっくにバッククオートあるよw
0163デフォルトの名無しさん2009/02/05(木) 04:06:48
Lisp-85ってS-OSというZ-80のOS上で動く奴なんだが
fexpr形式やmacro形式はあってもバッククォートは無かったぞ
0164デフォルトの名無しさん2009/02/05(木) 08:52:25
Alan Bawden, "Quasiquotation in Lisp"によれば、

 現在とは少し記号法が違うが、1972年のConniverが現代的な
 quasi-quoteの起源。

 少なくとも1977年ごろのLisp machineには、現在使われているのと
 ほぼ同じquasi-quoteがあった。

ということらしい。

D. V. McDermott and G. J. Sussman, "The Conniver reference manual," 1972
ftp://publications.ai.mit.edu/ai-publications/0-499/AIM-259a.ps

Alan Bawden, "Quasiquotation in Lisp," 1999
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.5.2566

0165デフォルトの名無しさん2009/02/05(木) 10:11:52
'の逆はevalだと思ってた
0166デフォルトの名無しさん2009/02/05(木) 10:29:33
>>163
Z80には荷が重かったのでは
メモリどんだけ積んでたとか知らないけど
展開後は再帰関数のかたまりだし
0167デフォルトの名無しさん2009/02/05(木) 10:39:22
全然問題ない。
0168デフォルトの名無しさん2009/02/05(木) 10:57:09
あっそ
ならLisp-85作った人が入れ忘れたんだね
0169デフォルトの名無しさん2009/02/05(木) 11:05:52
quasi-quoteを効率を保ってきちんと実装するのは意外と難しい。
80年代になってもマクロと組み合わせた時の実装手法の論文があった。
アンチquasi-quote派というのが昔はいた。Common Lispで決着。
0170デフォルトの名無しさん2009/02/05(木) 11:51:35
Gauche WiLiLiのあんまり目立たないとこに自分の作ったパッケージ書き足す方法はないものだろうか
0171デフォルトの名無しさん2009/02/05(木) 16:28:07
>>156
その関数の引数f,gにシンボルxを引数として渡すと死ねる。
0172デフォルトの名無しさん2009/02/05(木) 18:05:14
やっぱり gensym が必要なんだね。
0173デフォルトの名無しさん2009/02/05(木) 18:47:23
関数名じゃなく、関数「値」を式に埋め込めばいい。
gosh> (define x (list + 1 2))
x
gosh> (define y (list '+ 1 2))
y
gosh> (define + -)
+
gosh> (+ 1 2)
-1
gosh> (eval x (current-module))
3
gosh> (eval y (current-module))
-1
0174デフォルトの名無しさん2009/02/05(木) 20:23:37
再帰関数だったら?
0175デフォルトの名無しさん2009/02/05(木) 21:49:55
そこまで行くとR5RSでも解決できてるかどうか怪しい
R6RSは再定義禁止だっけ
0176デフォルトの名無しさん2009/02/05(木) 21:59:07
R5RSの件は
(define f (letrec ((f ...)) f))
と書けば安全かも
0177デフォルトの名無しさん2009/02/06(金) 08:10:38
仕様に自由があるから面白い。
0178デフォルトの名無しさん2009/02/06(金) 16:01:07
>>173
で'の使い方わかった気がするけど
本格的に勉強するならどの本がいいのでしょうか?
0179デフォルトの名無しさん2009/02/06(金) 17:53:52
>>178
SICPがいいよ
マクロの話題は一切ないけど、マクロは遊ぶものであって勉強するものではない
それでもSICPがSchemeを使ってる理由を考えながら読めばおもしろいかもね
0180デフォルトの名無しさん2009/02/06(金) 18:39:03
俺はOnLispをお勧めする。
0181デフォルトの名無しさん2009/02/06(金) 19:54:30
ふつうにあのお魚の本でよくないか?
0182デフォルトの名無しさん2009/02/06(金) 20:48:41
処理系のソースで十分
0183デフォルトの名無しさん2009/02/06(金) 21:37:03
ttp://user.ecc.u-tokyo.ac.jp/~tt076524/onlispjhtml/
ほれ
0184デフォルトの名無しさん2009/02/06(金) 23:02:05
うわーっ!びっくりした
と避ける
0185デフォルトの名無しさん2009/02/07(土) 08:31:34
>>169
ふむふむ、勉強になります。
そういえば関係あるかわからないけど、 scheme じゃなくて elisp も、
Emacs19 のころは

`(foo ,bar)

とはかけなくて、

(` (foo (, bar)))

と書いていたような。
0186デフォルトの名無しさん2009/02/07(土) 13:41:36
関係ないけどチャイティンのLispでは'はシンボルで
(QUOTE X) == (' X)
って書いてたな
0187デフォルトの名無しさん2009/02/07(土) 14:53:09
(define (% num1 num2) (remainder num1 num2))
としてるんですが、関数に別名与えるもっと良い方法はありますか?
0188デフォルトの名無しさん2009/02/07(土) 15:21:52
引数の数が一致しているのなら
(define % remainder)
0189デフォルトの名無しさん2009/02/07(土) 17:06:46
それでいいんですね。
気づきませんでした。

ありがとうございます。
0190デフォルトの名無しさん2009/02/07(土) 19:07:14
指定のクロージャが束縛されているシンボルを探す方法ってありますか?
0191デフォルトの名無しさん2009/02/07(土) 20:08:34
処理系によってはあるかもしれないけどRnRSにはないんじゃないかなぁ。
CLにはあるかもしれませんけどSchemerだから知らないです。
シンボルのリストを引数に与えるのであれば
グローバル束縛されているクロージャをevalで取り出してeq?して調べられるけど
グローバル変数のリストはどうやって得ればいいかわかりません。
それにローカル束縛も含めるとなると不可能じゃないでしょうか。
0192デフォルトの名無しさん2009/02/07(土) 20:28:40
CL なら do-symbols で探せるんじゃないかと。
0193デフォルトの名無しさん2009/02/07(土) 22:01:31
Haskellとlispの得意不得意ってどんなところなのでしょうか?
0194デフォルトの名無しさん2009/02/07(土) 22:44:15
別に無いよ?
0195デフォルトの名無しさん2009/02/07(土) 22:53:19
>>193
特にないんじゃないの?
文字列を扱うとめちゃくちゃメモリ食うってのがHaskellの弱点かもしれんけど
今時のマシンだったら何の問題も無いし。

0196デフォルトの名無しさん2009/02/07(土) 22:56:48
Haskellとlispを戦わせたくてしょうがないらしい
0197デフォルトの名無しさん2009/02/07(土) 23:04:03
ムシキングか何かでやってください
0198デフォルトの名無しさん2009/02/07(土) 23:39:04
[Lisp] 攻撃:85 素早さ:94 防御:96 命中:68 運:32 HP:154
[Haskell] 攻撃:68 素早さ:55 防御:65 命中:52 運:31 HP:233

Lisp vs Haskell 戦闘開始!!
[Lisp]の攻撃 HIT [Haskell]は91のダメージを受けた。
[Haskell]の攻撃 HIT [Lisp]は11のダメージを受けた。
[Lisp]の攻撃 HIT [Haskell]は109のダメージを受けた。
[Haskell]の攻撃 HIT [Lisp]は0のダメージを受けた。
[Lisp]の攻撃 HIT [Haskell]は76のダメージを受けた。
[Lisp]が[Haskell]を倒しました(ラウンド数:3)。
魔法のMD5 - MD5バトル http://www.newspace21.com/mix/btl.php
0199デフォルトの名無しさん2009/02/07(土) 23:41:50
いちいち貼らなくていいよ
0200デフォルトの名無しさん2009/02/07(土) 23:49:28
>>193
Haskellは近くのコンビニにぬり絵が売ってます。
Lispはドンキホーテに行けばぬいぐるみが売っています。
>>193君はどちらが好きですか?
0201デフォルトの名無しさん2009/02/08(日) 00:02:40
外に出なくても済む方がいいです
0202デフォルトの名無しさん2009/02/08(日) 07:17:52
λ
0203デフォルトの名無しさん2009/02/08(日) 08:13:10
maximaの中に面白いのみっけた

(defun for-eval-then-quote (var)
`(list 'quote ,var))

(setq x 1)
(for-eval-then-quote x)
-> '1
0204デフォルトの名無しさん2009/02/08(日) 12:37:31
>>203
えーと、ほんとにそれを動かしたら'1になったのかい?
正しい結果は(list 'quote 1)になるのでは。
関数とマクロの評価はごっちゃにしないように。
この辺り何か思い違いしてると思うよ。
ちなみに'1を期待するなら関数の中身は`',var または(list 'quote var)
0205デフォルトの名無しさん2009/02/08(日) 13:23:49
>>204
間違えました
(eval (for-eval-then-quote x))
->'1
0206デフォルトの名無しさん2009/02/09(月) 01:08:08
loopマクロ勉強したのにiterateの方が使われてたり
言語の発展はゆるやかだ
とか言ってたのどこのどいつだ
0207デフォルトの名無しさん2009/02/09(月) 01:52:43
>>206
それ言語じゃなくてライブラリの発展だと思うんだが……。
0208デフォルトの名無しさん2009/02/09(月) 02:14:28
>>206
これ読め。
http://pc11.2ch.net/test/read.cgi/tech/1203096230/251
0209デフォルトの名無しさん2009/02/10(火) 12:06:52
[clojure] 攻撃:28 素早さ:67 防御:78 命中:87 運:55 HP:202
[Qi II] 攻撃:51 素早さ:21 防御:48 命中:69 運:23 HP:189

clojure vs Qi II 戦闘開始!!
[clojure]の攻撃 HIT [Qi II]は1のダメージを受けた。
[Qi II]の攻撃 HIT [clojure]は16のダメージを受けた。
[clojure]の攻撃 HIT [Qi II]は56のダメージを受けた。
[Qi II]の攻撃 HIT [clojure]は1のダメージを受けた。
[clojure]の攻撃 HIT [Qi II]は56のダメージを受けた。
[Qi II]の攻撃 HIT [clojure]は10のダメージを受けた。
[clojure]の攻撃 HIT [Qi II]は38のダメージを受けた。
[Qi II]の攻撃 HIT [clojure]は1のダメージを受けた。
[clojure]の攻撃 HIT [Qi II]は25のダメージを受けた。
[Qi II]の攻撃 HIT [clojure]は1のダメージを受けた。
[clojure]の攻撃 HIT [Qi II]は57のダメージを受けた。
[clojure]が[Qi II]を倒しました(ラウンド数:6)。
魔法のMD5 - MD5バトル http://www.newspace21.com/mix/btl.php
0210デフォルトの名無しさん2009/02/10(火) 13:48:31
kill
0211デフォルトの名無しさん2009/02/10(火) 15:30:33
連邦のモビルスーツは化け物か!?
0212デフォルトの名無しさん2009/02/11(水) 05:14:36
array->list 変換関数がみつからない
自分で書くものなの?
(array->list
#2a((1 2)(3 4)))
->((1 2)(3 4))
0213デフォルトの名無しさん2009/02/11(水) 23:55:21
>>自分で書くものなの?
R5RSには記述がないからそうだと思うけど,
それより#2a(...の2aって何?
0214デフォルトの名無しさん2009/02/12(木) 00:02:23
#2A(..)ってのはCommon Lispの二次元配列かな。
ARRAY (2)のリストになってほしいのか、リストのリストになってほしいのか。
まぁ、結論からいうと>>212ARRAY (2 2)はLISTと互換性がないからムリ。自分で書く。
ベクタとかなら (coerce #(1 2 3) 'list) で変換できる。
0215デフォルトの名無しさん2009/02/12(木) 03:21:33
lispに興味があるんですが、
いまからlispを勉強するならなんの書籍がお勧めですか?
SICPってのがお勧めっぽいんですが、MITで使われてるとなると・・・
読みこなせるかなー
0216デフォルトの名無しさん2009/02/12(木) 05:29:30
オンラインで読める無料の
・独習Scheme三週間 ttp://www.sampou.org/scheme/t-y-scheme/
・入門Scheme ttp://www4.ocn.ne.jp/~inukai/scheme_primer_j.html
や
書籍じゃないけど
・もうひとつのScheme ttp://www.shido.info/lisp/idx_scm.html
あたりを読んでから買えばいいんじゃないでしょうか。
0217デフォルトの名無しさん2009/02/12(木) 05:46:35
>>215
SICP読んでみて、自分に合いそうなら買うのがいいとおも。
http://mitpress.mit.edu/sicp/
0218デフォルトの名無しさん2009/02/12(木) 10:05:25
SICP日本語版はちょっと高い
0219デフォルトの名無しさん2009/02/12(木) 10:48:56
なんでいきなりSICPなんじゃーー
0220デフォルトの名無しさん2009/02/12(木) 11:11:47
「良い本だ」ってよくScheme関連のWEBに載ってるから。
0221デフォルトの名無しさん2009/02/12(木) 11:20:35
良い本には違いないけど、
SICPも買いたいなら、別の本と併読した方がいいと思う。
言語仕様書が日本語化されているからそれでいいか、
って人ならSICPだけで問題なし。
0222デフォルトの名無しさん2009/02/12(木) 12:06:25
maximaが使いたいだけだったので
on lispはじっくり読んだが
SICPは問題もやらずに流し読み
0223デフォルトの名無しさん2009/02/12(木) 20:13:48
SICP は Scheme の本というわけではない。
Scheme を使って解説してる本。
0224デフォルトの名無しさん2009/02/12(木) 20:19:01
>>223
え、そうなんですか?
自分はアルゴリズムの勉強のために買いました。

序盤の関数 f(x) の話とか、大学の数学が懐かしいです。
0225デフォルトの名無しさん2009/02/12(木) 20:22:09
SICPにアルゴリズムの話が出てないわけではないが、
SICPをやってもアルゴリズムを勉強したとは言えない。
0226デフォルトの名無しさん2009/02/12(木) 20:22:39
>>223
何を解説してるの? w
0227デフォルトの名無しさん2009/02/12(木) 20:28:22
>>226

っ人生
0228デフォルトの名無しさん2009/02/12(木) 20:36:31
>>226
本のタイトル
0229デフォルトの名無しさん2009/02/12(木) 20:44:04
>>226
降り続く雨
きしむ廊下
立ち止まる足音
遠のく意識
0230デフォルトの名無しさん2009/02/13(金) 01:35:07
SICP読んだら魔法使いになれますか?
0231デフォルトの名無しさん2009/02/13(金) 07:26:27
>>230
なれません。
0232デフォルトの名無しさん2009/02/13(金) 07:45:20
>>230
なれます。
就活に有利です。
0233デフォルトの名無しさん2009/02/13(金) 11:01:41
>>230
さあ、30歳になるまで貞操を守る作業に戻るんだ
0234デフォルトの名無しさん2009/02/13(金) 14:39:58
30歳を越えてるのですがSICPは読めますか?
0235デフォルトの名無しさん2009/02/13(金) 14:51:53
読めなかったら困ると思いますよ
0236デフォルトの名無しさん2009/02/13(金) 15:01:35
60歳とかでも読めるらしいですよ
読めなかったら数学勉強してから再挑戦しましょう
0237デフォルトの名無しさん2009/02/13(金) 19:19:40
30歳過ぎてもSICP読むと童貞になりますか?
0238デフォルトの名無しさん2009/02/13(金) 19:34:56
俺はSICPを読んで、背が10cm伸びたよ
0239デフォルトの名無しさん2009/02/13(金) 19:49:08
SICP読んで宝くじ当たったよ。
0240デフォルトの名無しさん2009/02/13(金) 19:50:51
もしかして訳者の和田さんってスーフリの和田さん?
0241デフォルトの名無しさん2009/02/13(金) 19:52:39
プログラマ50人に1人ぐらいはSICP読んでるよね。
0242デフォルトの名無しさん2009/02/13(金) 19:54:25
>>250
和田って俺のことだけど。
0243デフォルトの名無しさん2009/02/13(金) 20:28:13
SICP未読で許されるのは小学生までだよね!
0244デフォルトの名無しさん2009/02/13(金) 22:31:02
ちょっと待ってくれ。「人生に必要な知恵はぜんぶ幼稚園の砂場で学んだ」とあるように、幼稚園のうちに読んでおくべきものではないだろうか?
0245デフォルトの名無しさん2009/02/13(金) 22:34:17
なんてこったい/(^o^)\
0246デフォルトの名無しさん2009/02/13(金) 22:52:02
人生に必要な知恵はぜんぶサンドボックで学んだ。
0247デフォルトの名無しさん2009/02/13(金) 22:55:25
俺、人生に必要な知恵はぜんぶ死後の世界で学ぶんだ…
0248デフォルトの名無しさん2009/02/13(金) 23:02:42
次はアメンボに生まれてきたりして
0249デフォルトの名無しさん2009/02/13(金) 23:07:08
おれも人生に必要なことは幼稚園で一通り学んだ覚えがあるな
0250デフォルトの名無しさん2009/02/13(金) 23:14:11
>>249
ってことは、幼稚園で、チュー済ませたタイプか。
0251デフォルトの名無しさん2009/02/13(金) 23:45:23
登り棒オナニーなら幼稚園の時に覚えました
0252デフォルトの名無しさん2009/02/14(土) 00:48:59
SICP以外誇れるものはないのか
■ このスレッドは過去ログ倉庫に格納されています