Lisp Scheme Part19
..
49:デフォルトの名無しさん
08/01/15 07:41:10
なんでここの人たちって、延々言語の事話してるの?
そんなもの自分で決められないんだから、そんな事話してる暇有ったら
Lispでアプリケーションの一つでも書いたらどうなの?
プログラミング言語なんで、ただの道具でしょ。
C言語に例えたら、延々ポインタの表記法の是非について語ってるみたいで
キモイんだけれど。
50:デフォルトの名無しさん
08/01/15 07:45:08
キモければ来なければいい。
51:デフォルトの名無しさん
08/01/15 07:52:04
>>50
>キモければ来なければいい。
そんな排他的な事言ってるからいつまでたっても
広がらないんじゃないの?
お前達は象牙の塔の住人なのか?
このスレの中に一人でも「Lispを使ってこんな事が出来るんだ!」
と人を驚かすようなアプリケーション書いた奴いるの?
グダグダ言語の事はなしてるより、アプリケーション書いた方が
万倍、計算機科学の発展に役立つと思うのだけれど。
グダグダ話してる内容も、外国の本の読み合いなんだしさ、意味ないよ。
52:デフォルトの名無しさん
08/01/15 07:54:13
それ以前に、何がどういう風にキモイのかが、その例ではわからないなぁ。
たぶん>>49は、「自分にとってキモイ」ということが、自分以外の人間にとっても通用する
普遍的で価値のあることで、だから詳細もすっ飛ばすし上から目線にもなってるんだろうけど、
それは自意識過剰ってもんでしょう。
「>>49にとってキモイ」という事実は、悪いけどゴミみたいな価値しかないことだから、
意味が無いし、もっとちゃんと話さないと通じないです。
53:デフォルトの名無しさん
08/01/15 07:56:36
>>51
じゃあまぁ、頑張ってアプリケーション書いてくれ。
他人に要求することや、他人をジャッジする内容を、まず自分に適用して生き続けるのが
厨と卒業する上で大事なことだから。
54:デフォルトの名無しさん
08/01/15 07:58:04
Lispで書くのって言語自身を拡張していく感じがあるから、Cなんかとは少し感覚が違うのかもしれん。
55:デフォルトの名無しさん
08/01/15 08:04:33
あらまぁ、あっというまの反論。
プログラマって人種はクリエイティブって言うし、
Lisp使う人は最高のプログラマって称号もあるけれどさ。
実際このスレ覗くと、延々使い古された古典の読み合いと紹介。
新規性の欠片もなくて、どこがクリエイティブなんだか。
56:デフォルトの名無しさん
08/01/15 08:05:14
こんな時にようかんマンが居ればなあ…
57:デフォルトの名無しさん
08/01/15 08:07:34
>>55
で、君どうしたいの?
そろそろ学校行ったら。
58:デフォルトの名無しさん
08/01/15 08:10:18
>>55
なんか君の言ってることの内容が、相手の対応によってどんどん変わってきてるな。
君の最初の疑問「なぜ延々言語の事話してるのか」の答は、ここが言語のことを話すスレであって、
ここで何かアプリケーションを作るスレではないからだよ。
あと、「そんな事話してる暇有ったらLispでアプリケーションの一つでも書いたらどうなの?」ってのは、
2chに書き込む行為を一切やめて、その時間をすべてプログラミングにあてろ、
そういう生活をしないならお前らはキモイ、という意味?
59:デフォルトの名無しさん
08/01/15 08:13:41
「クリエイティブ」と「新規性」も別に直結するものではないよなぁ。
なんか、切れ切れに言葉をしってるだけの二十歳くらいの坊やに思えてきた。
60:デフォルトの名無しさん
08/01/15 08:23:56
>「そんな事話してる暇有ったらLispでアプリケーションの一つでも書いたらどうなの?」ってのは、
>2chに書き込む行為を一切やめて、その時間をすべてプログラミングにあてろ、
>そういう生活をしないならお前らはキモイ、という意味?
違うよ。
>このスレの中に一人でも「Lispを使ってこんな事が出来るんだ!」
>と人を驚かすようなアプリケーション書いた奴いるの?
って事だよ。
Lispで今まで解けると思われていなかった問題を解けるようなアプリケーションを書けって事だよ。
それなのにお前らは、延々古典の読み合いばかり。
ガッカリだ。
とても新しい発想が生まれるとは思えない。
悔しかったら、「コレスゲー」ってもの出してみろ。
61:デフォルトの名無しさん
08/01/15 08:47:38
「悔しかったら出してみろ」じゃ、誰も出さないと思うよ。
言ってることが間抜け過ぎて、誰も悔しくないだろうから・・・。
62:デフォルトの名無しさん
08/01/15 09:31:11
くやしい・・・ビクビク
63:デフォルトの名無しさん
08/01/15 10:58:30
>
64:デフォルトの名無しさん
08/01/15 10:59:58
ごめん、間違えてREPL
>
65:デフォルトの名無しさん
08/01/15 11:19:18
個人的には新しい発想といえば.NETだな
.NETは言語じゃないけどな
言語じゃないというのが新しいよな
つまり.NETでLispを使えということだな
66:デフォルトの名無しさん
08/01/15 11:27:25
> 延々古典の読み合いばかり
ここはそういうところだから。
残念ながらLisp系でプロダクトコード書ける環境にいる人間は希少種だし。
というか他の言語スレも似たようなもんだが
Lisper/Schemerにはなんか期待しちゃうところがあるんかな?
67:デフォルトの名無しさん
08/01/15 11:31:36
正直ここに身元がばれるようなことは書きにくいw
ネタにされるだけだし
68:デフォルトの名無しさん
08/01/15 12:22:03
ここで煽る前に自分でやればぁw
自分が書いてるものの話なんかこんなところでできるかよ。
特定されたら面倒でかなわん。
69:デフォルトの名無しさん
08/01/15 16:22:20
そうだな。俺様のように社会的地位が高いと2chに来てるとバレるだけで恥だ。w
70:デフォルトの名無しさん
08/01/15 17:13:01
>>69
竹内郁雄先生ですか?
71:竹内郁雄
08/01/15 17:37:12
そうだよ。
良くわかったね。
実はtao/elisのソースを公開したいんだが、
電電公社が持っててね。
学術振興になると思うんだけれど、残念だ。
72:デフォルトの名無しさん
08/01/15 17:48:36
ポールグレアムからひとこと
↓
73:デフォルトの名無しさん
08/01/15 18:01:42
SRFI-45:lazyの使いどころがいまいちよくわからない
(delay (force ...))をforceすると末尾再帰でないforceの呼出しになって
メモリを食いつぶすのを防ぐために使うのはわかったんだけど
末尾呼出しでない関数にlazyをつけると逆にメモリを食いつぶすようになる
末尾呼出しされるストリームを返す関数に使えばいいのかな
74:デフォルトの名無しさん
08/01/15 18:07:27
ー-ニ _ _ヾV, --、丶、 し-、
ニ-‐'' // ヾソ 、 !ヽ `ヽ ヽ
_/,.イ / /ミ;j〃゙〉 }U } ハ ヽ、}
..ノ /ハ 〔 ∠ノ乂 {ヽ ヾ丶ヽ ヽ >>60
ノノ .>、_\ { j∠=, }、 l \ヽヽ ', _ノ
ー-=ニ二ニ=一`'´__,.イ<::ヽリ j `、 ) \ そもそも『悔しかったら、「コレスゲー」ってもの出してみろ』とは何なのか
{¨丶、___,. イ |{. |::::ヽ( { 〈 ( 〉
'| | 小, |:::::::|:::l\i ', l く 君の意見を聞こうッ!
_| | `ヾ:フ |::::::::|:::| } } | )
、| | ∠ニニ} |:::::::::|/ / / / /-‐-、
トl、 l {⌒ヽr{ |:::::::::|,/// \/⌒\/⌒丶/´ ̄`
::\丶、 ヾ二ソ |:::::::/∠-''´
/\\.丶、 `''''''′!:::::::レ〈
〉:: ̄::`'ァ--‐''゙:::::::/::::ヽ
\;/:::::::::::::/::/:::::::::::://:::::〉
::`ヽ:::ー-〇'´::::::::::::::::/-ニ::::(
/ \
75:デフォルトの名無しさん
08/01/15 18:24:58
ポールグレアム日本語達者だなぁ
76:デフォルトの名無しさん
08/01/15 18:29:04
arcのソースが公開されるって?
77:デフォルトの名無しさん
08/01/15 18:31:27
いや、多分Lispで翻訳してるんだよ。
Emacsで2ch開くとAA以外は英語に翻訳され、
レスは自動で日本語になって書き込まれる。
ポールグレアムほどのスパーハカーなら1秒以内にそのくらいは考えつくはず。
78:デフォルトの名無しさん
08/01/15 18:43:39
>>47
アラバマ物語もじってたのか。原題知らなかったw 「ものまね鳥を殺すには」が直訳かな。
ものまね鳥って「危害を加えない人」をたとえてるから、スマリヤンのタイトルでは「副作用のない演算」ぐらいの意味だろうか?
てことは「副作用のない演算に似たものを作るには」ぐらいの意味のタイトルみたいだ。「ものまね鳥をまねる」じゃ意味が伝わらないよなぁ。
役者も意味が取れていなかったのがいまさらながらわかった希ガス。
79:デフォルトの名無しさん
08/01/15 18:47:24
>>73
具体的にどういうコード?
80:デフォルトの名無しさん
08/01/15 18:50:30
「副作用のない演算に似たものを作るには」の『副作用のない演算に似たもの』=『コレスゲーってプログラム』と読み替えると、
スマリヤンの本が>>60への答えになってるなw
「ものまね鳥をまねる」 = 「コレスゲーってプログラムを作るには」
81:デフォルトの名無しさん
08/01/15 19:03:21
こういう会話でまとめておこうw
スマリヤン:「コレスゲーってプログラムを作るには?」
グレアム :「Yコンビネータ・On・Lisp」
82:デフォルトの名無しさん
08/01/15 19:07:55
arcの言語仕様って公開されたの?
83:デフォルトの名無しさん
08/01/15 19:13:35
>>81
"On Lisp"の内容、マクロが中心だたから、「コンビネータ使って副作用のないマクロを書け。そうすれば『コレスゲープログラム』が作れるぞ!」って意味なのねん?
84:デフォルトの名無しさん
08/01/15 19:17:28
>>80
どうだろう。彼が要求しているのは
「今まで解けると思われていなかった問題を解けるような"アプリケーション"」
だからなぁ。
それってつまり、チューリング等価を越えろっていう要求ではないかと思うんだ。
彼は言語のパワーというものが、あるものを「どう」実現できるかという"how"の領分の話だということが
まるで理解できていないんでは?
「Lispが凄いのなら、Lispで書いたプログラムにしか為し得ない動作があるのだろう」
という発想でモノを言ってるように窺える。てかそもそも「アプリケーション」って言い方が猛烈に素人臭いしw
85:デフォルトの名無しさん
08/01/15 19:21:43
>>79
;(define (stream-cdr stream)
; (srfi-45:lazy (cdr (srfi-45:force stream))))
これはプロミスを受け取ってプロミスを返す関数だからlazyをつけたいとこだけど
;(define (stream-tail stream k)
; (srfi-45:lazy
; (if (zero? k)
; stream
; (stream-tail (stream-cdr stream) (- k 1)))))
とかで末尾呼出しされない場合メモリを食いつぶす
86:デフォルトの名無しさん
08/01/15 19:27:11
>>84
プログラミング言語なんて所詮は「λ算法=チューリングマシン」の糖衣構文に過ぎないからねぇ。
スマリヤンの本の趣旨は「コレスゲーってプログラムをつくるには(ゲーデルのいうように限界があるのだよ)」ということだからねぇ。
87:デフォルトの名無しさん
08/01/15 19:39:14
(delay (force ...))とかしなくても
call/ccでdelayを包めばいいじゃん
とか思ったりもしたけど
遅延される計算量がエラいことになって使い物にならないことに
実行するまで気づかなかった('A`)
というか実行しても暫く気づかなかったorz
88:デフォルトの名無しさん
08/01/15 19:40:05
>>85
forceはどこいった?
89:デフォルトの名無しさん
08/01/15 19:41:51
これテンプレに入れようよw
URLリンク(www.asahi-net.or.jp)
90:デフォルトの名無しさん
08/01/15 19:41:59
>>88
stream-tailがプロミスを返すので
(srfi-45:force (stream-tail s 10))とかするつもり
91:デフォルトの名無しさん
08/01/15 19:52:19
>>90
srfi-45のルール通りにやれ
92:デフォルトの名無しさん
08/01/15 20:03:54
>>91
どこらへんがルールと違う?
* wrap all constructors (e.g., '(), cons) with delay,
* apply force to arguments of deconstructors (e.g., car, cdr and null?),
* wrap procedure bodies with (lazy ...).
は守ってるつもりだけど
93:デフォルトの名無しさん
08/01/15 20:06:30
>>89
朝日ネットのURLは
/~KI4S-NKMR/
こう書くほうが好みだな
94:デフォルトの名無しさん
08/01/15 20:33:04
>>83-84,>>86
ループまたは再帰のあるチューリング完全なプログラミング言語は等価であるということですか。やっとわかりました。(汗
等価であるなら個別の問題に対して実装しやすい言語を使えば良いということですよね。
でLisp/Schemeの場合、マクロで拡張してその問題に特化したDSLを作成して実装したらいいというのがグレアムのスタンス。
>>54が言ってた言語の拡張性がこの言語のユーザーの強みといえるかな。SLLGENとかもソレ系ですし。
95:デフォルトの名無しさん
08/01/15 20:58:31
>>83-84,>>86,>>94
そういう流れのLisp本、チャイティン著「知の限界」「数学の限界」という本がありますよ。
Lisp使ってゲーデルの不完全性定理やチューリングの停止問題を説明してます。
96:デフォルトの名無しさん
08/01/15 21:09:22
ググってたらゲーデルもLisperだったって書いてあった。
97:デフォルトの名無しさん
08/01/15 21:16:06
>>93
うるさいことを言うと、URLの中の ~ はエスケープしなければいけないという「規格」になっておる。
98:デフォルトの名無しさん
08/01/15 21:17:44
87は計算量以外に初歩的かつ致命的な欠点があった
忘れてくださいorz
99:デフォルトの名無しさん
08/01/15 21:27:29
Sho"nfinkel Rules!!!
100:デフォルトの名無しさん
08/01/15 21:50:27
>>96
ホフスタッターの本にそんなのあったね。
あった!「メタ、マジックゲーム」p445
「ゲーデルはリスプ(Lisp)を思いついておくべきだった。
もし彼がリスプを思いついていたならば...」
101:デフォルトの名無しさん
08/01/15 22:12:48
>>97
> >>93
> うるさいことを言うと、URLの中の ~ はエスケープしなければいけないという「規格」になっておる。
RFC 1738 ではそうですね。
URI (RFC 2396) ではおkです。
102:デフォルトの名無しさん
08/01/15 22:14:20
みんな学があるなあ
103:デフォルトの名無しさん
08/01/15 22:47:42
学々古々
104:デフォルトの名無しさん
08/01/15 23:01:11
>>95
「知の限界」読み直してみようと思う。p71のLISPによるゲーデルの証明、
これSchemeで書きなおせるかやってみる。
チャイティンの書いたLispインタープリタってネットで公開されていたような...
105:デフォルトの名無しさん
08/01/15 23:02:24
lex/yacc&flex/bisonでパーサー作るより>>94みたくDSLで拡張すれば、既存のLisp/Schemeのプログラムとくっ付けることでいとも簡単に新しい処理系が出来てしまうのか。
しかもPrologとかAIを組み合わせればちょっと他の処理系では作りにくいものも作れてしまうのか。ガンダムの教育型OSってこんなイメージかなw
がんばってLittle Schemerシリーズ読んでみようかな。Ocaml/Haskellはかじったけどこっちの方が面白杉。
106:デフォルトの名無しさん
08/01/15 23:05:54
>>104
あれ、emacsやxyzzyでも動くのかな?Scheme版出来たらうpキボンヌ
107:デフォルトの名無しさん
08/01/15 23:10:14
>>95,>>100,>>104達、すごい本読んでるね。
108:デフォルトの名無しさん
08/01/15 23:13:16
>>103
そんなオマエにガクガクブルブルw
109:デフォルトの名無しさん
08/01/15 23:18:14
「げー出る、エッシャー、バッハ」と「メタマジック・ゲーム」は俺も本棚に飾ってあるぜー!
前者は箱入りなのに後者は箱がなくて悲しいぜ。
110:デフォルトの名無しさん
08/01/15 23:19:24
このスレで紹介された本
[1] Little Schemer
[2] Seasoned Schemer
[3] Reasoned Schemer
[4] To Mock a Mockingbird(ものまね鳥をまねる)
[5] To kill a mocking bird(アラバマ物語)
[6] On Lisp
[7] 知の限界
[8] 数学の限界
[9] メタ、マジックゲーム
[10] SICP
111:デフォルトの名無しさん
08/01/15 23:20:26
[11] ゲーデル・エッシャー・バッハ
112:デフォルトの名無しさん
08/01/15 23:27:42
前スレからだけどこれもあった。2月が楽しみ。wktk
[12] 「プログラミングGauche」 川合史朗 監修 Kahuaプロジェクト 著
113:デフォルトの名無しさん
08/01/15 23:40:25
>>45
Yコンビネータまで8羽理解すればいいのか。今、気がついたw
S (ムクドリ:Starling)
K (チョウゲンボウ:Kestrel)
I (???:Identity bird)=SKK
B (???:Blue bird)=S(KS)K
C (コウカンチョウ:Cardinal)=S(BBS)(KK)
M (ものまね鳥:Mocking bird)=SII
L (ヒバリ:Lark)=CBM
Y (賢人鳥:Why bird)=SLL
114:デフォルトの名無しさん
08/01/15 23:50:00
>>113
ホレ。
(define S (lambda (f) (lambda (g) (lambda (x) ((f x) (g x))))))
(define K (lambda (x) (lambda (y) x)))
(define I (lambda (x) x))
(define-macro (define-combinator name body)
`(define ,name
(lambda (arg)
(,body arg))))
(define define-combinator define)
(define-combinator B ((S (K S)) K))
(define-combinator C ((S((S(K((S(K S))K)))S))(K K)))
(define-combinator M ((S I) I))
(define-combinator L ((C B) M))
(define Y
(lambda (F)
((lambda (my-make-f)
(F (lambda (x) ((my-make-f my-make-f) x))))
(lambda (my-make-f)
(F (lambda (x) ((my-make-f my-make-f) x)))))))
115:デフォルトの名無しさん
08/01/15 23:52:45
(define (Fact my-fact)
(lambda (n)
(if (= n 0)
1
(* n (my-fact (- n 1))))))
(define fact (Y Fact))
(fact 10)
3628800
116:デフォルトの名無しさん
08/01/15 23:53:43
(define (Fib my-fib)
(lambda (n)
(if (<= n 1)
1
(+ (my-fib (- n 1))
(my-fib (- n 2))))))
(define fib (Y Fib))
(fib 10)
89
117:デフォルトの名無しさん
08/01/15 23:55:09
これでもいいハズだけどw
(define-combinator Y ((S L) L))
118:デフォルトの名無しさん
08/01/16 00:00:31
>>110
> [9] メタ、マジックゲーム
超なつかしい
高校の夏休みにY.M.O.ベストと一緒に図書館で借りて読んだのをおぼえてる。
いま思うと充実してたなあの頃は。
119:デフォルトの名無しさん
08/01/16 00:02:22
,. -‐'''''""¨¨¨ヽ それじゃあ僭越ながら
(.___,,,... -ァァフ| あ…ありのまま 今 起こった事を話すぜ!
|i i| }! }} //|
|l、{ j} /,,ィ//| 『おれは階乗計算のために無名関数をいじっていたと
i|:!ヾ、_ノ/ u {:}//ヘ 思ったらいつのまにかいじる前の状態に戻っていた』
|リ u' } ,ノ _,!V,ハ |
/´fト、_{ル{,ィ'eラ , タ人 な… 何を言ってるのか わからねーと思うが
/' ヾ|宀| {´,)⌒`/ |<ヽトiゝ おれも何をされたのかわからなかった…
,゙ / )ヽ iLレ u' | | ヾlトハ〉
|/_/ ハ !ニ⊇ '/:} V:::::ヽ 頭がどうにかなりそうだった…
// 二二二7'T'' /u' __ /:::::::/`ヽ
/'´r ー---ァ‐゙T´ '"´ /::::/-‐ \ グラハムだとかチャイティンだとか
/ // 广¨´ /' /:::::/´ ̄`ヽ ⌒ヽ そんな大層なもんじゃあ 断じてねえ
ノ ' / ノ:::::`ー-、___/:::::// ヽ }
_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::... イ もっと恐ろしい「普通の再帰」と「Yコンビネータ」の違いを味わったぜ…
120:デフォルトの名無しさん
08/01/16 02:29:41
とりあえず、グレアムな
121:デフォルトの名無しさん
08/01/16 06:00:52
>>114
「計算論」(高橋正子著)を読み始めていたので参考になった。
ありがとう。
122:デフォルトの名無しさん
08/01/16 11:45:06
急に難しい話題が増えたね
俺はバカだから、理由もなく難しいことを考えるのは非合理的だと思うけど
君らにとっては難しくなくて、難しくないことを考えるのに理由は要らない
なんというかバカの壁を実感したよ
123:デフォルトの名無しさん
08/01/16 12:26:41
バカであることに気がついてる奴は大したバカではないよ
124:デフォルトの名無しさん
08/01/16 14:35:15
じゃあ俺も壁感じたから大した馬鹿じゃないな\(^o^)/ヨカター
ところで、新宿ジュンク堂にならLittle schemerあるかもと思ったけど無かった。
MITの本はいくつかあったけど。
注文したらアマゾンの方が早いかな。
125:デフォルトの名無しさん
08/01/16 18:06:49
>>113-114
チラ見だけど、SKKとかSIIとかSLLとかがやたら目に付いた。なんか深遠なパターンがあるんだろうな。
126:デフォルトの名無しさん
08/01/16 18:14:00
>>80-86
その「コレスゲープログラム」はunlambdaのことジャマイカ?
難読化してもちゃんと動くぜってノリだった希ガス。
127:デフォルトの名無しさん
08/01/16 19:39:36
ポルナレフに突っ込み入れる>>120はアブドゥルなのか?w
128:デフォルトの名無しさん
08/01/16 19:53:02
>>126
チャウチャウ。このスレの流れで言ってるコレスゲープログラムは定理証明機としての意味。だから>>95,>>104の話が出てきた。
>>100の紹介した本が言ってるのは「ゲーデルがもっと便利な定理証明機(Lisp)を思いついていれば」という意味だ。
つまりスマリヤンが言ってるコレスゲープログラムとはスゲー定理ということ。
129:デフォルトの名無しさん
08/01/16 19:54:52
コレスゲープログラム = スゲー定理 = ゲーデルの不完全性定理
130:デフォルトの名無しさん
08/01/16 19:59:59
つまり>>60はスマリヤンやチャイティン嫁ってことかw
131:デフォルトの名無しさん
08/01/16 20:19:26
タオイズムか!
132:デフォルトの名無しさん
08/01/16 20:55:13
「ものまね鳥をまねる」って「定理証明機=ラムダ算法=結合子論理=プログラミング言語」って意味だったのか。マジで知らなかった(汗
このスレ勉強になるな。
133:デフォルトの名無しさん
08/01/16 21:05:52
>>126
UnlambdaやBrainf*ckの意味ではなく、CoqやIsabella等の定理証明機が正解かな常考。
134:デフォルトの名無しさん
08/01/16 21:13:32
>>124
まちがいない。
135:デフォルトの名無しさん
08/01/16 21:27:01
>>86と>>132をみてチューリングマシーンが定理証明機だということに初めて気がついた。そういうことだったのか。
136:デフォルトの名無しさん
08/01/16 21:34:08
なら>>60が求めてるのは「公理データベースによって結果が異なる自動定理証明機」というところか?
137:デフォルトの名無しさん
08/01/16 23:00:18
>>135
チューリングマシーンがハードウェア型の定理証明機とするならラムダ算法とか結合子論理はソフトウェア型の定理証明機になってるよね。
でも>>100にあるようにもしもゲーデルがLispのようなプログラミング言語を知っていれば、ゲーデルの証明はもっと理解しやすかったのにということだよ。
つまり、たとえ等価でももっと分かり易くできるプログラミング言語があるならそれを使うべきだというのが結論じゃないかな。
教養として難しいことも知っておくのも意義はあるけどね。UnlambdaやBrainf*ckもそういう意味でしかないと思う。
138:デフォルトの名無しさん
08/01/16 23:13:01
自力では歯が立たなかったので下記を参考にやってみた。
URLリンク(www.unfindable.net)
;;不動点
(define (f x) `(',x ',x))
> (f 'x)
((quote x) (quote x))
> (f f)
((quote #<procedure:f>) (quote #<procedure:f>))
> (equal? (f f) (eval (f f)))
#t
> (equal? (f f) (eval (eval (eval (eval (eval (f f)))))))
#t
>
続く
139:デフォルトの名無しさん
08/01/16 23:14:00
;;チャイティン Lispによるゲーデルの証明
;;(valid-proof? x) の定義があると仮定する。xが妥当な証明なら'()
;;xが妥当な証明なら実証された定理を返す。
;;s式yが証明できない⇔すべてのs式xについて (valid-proof? x)が
;;yと等価とは限らない。
;;これを肯定する述語が (is-unprovable y)
(define (g x) `(is-unprovable (value-of (',x ',x))))
> (g 'x)
(is-unprovable (value-of ((quote x) (quote x))))
> (g g)
(is-unprovable (value-of ((quote #<procedure:g>) (quote #<procedure:g>))))
> (equal? (g g) (eval (cadr (cadr (g g)))))
#t
>
証明できないということは証明できない = (証明できないということは証明できない)ということは証明できない。
こういう意味なのだろうか?頭が痛くなりそうだ。
140:デフォルトの名無しさん
08/01/16 23:32:34
訂正
誤 ;;(valid-proof? x) の定義があると仮定する。xが妥当な証明なら'()
正 ;;(valid-proof? x) の定義があると仮定する。xが妥当な証明でないなら'()
141:デフォルトの名無しさん
08/01/16 23:37:03
>>139
その入れ子になっている計算が無限に続いた入れ子と仮定して、その計算はいつか止まるのかという意味になっている。
それがチューリングの停止性問題だ。1931年にゲーデルがやったことを1937年にチューリングがチューリングマシンで説明した問題。
それをチャイティンはLispで書いてみたってこと。チューリングの停止性問題でググレばわかりやすい説明が見つかるだろう。
(チャイティンにケチをつけるわけじゃないが、無限のメモリがないと同じことにはならない)
142:デフォルトの名無しさん
08/01/16 23:50:09
>>140
Little Schemerの9章に出てくるYコンビネータも無限に続いた入れ子(=再帰関数)を作るためだよね。
>>114-119のYコンビネータがそれに相当するかな。
143:138
08/01/16 23:58:33
>>141
>>142
なるほど〜。勉強になりました。
144:デフォルトの名無しさん
08/01/17 00:06:45
無限ループは止まらないだろ常考。ということは、「証明できないということは証明できないということは・・・」の答えが返ってこないから証明できないわけ。
145:デフォルトの名無しさん
08/01/17 00:08:35
>>143
おぉ、理解早いね。
146:デフォルトの名無しさん
08/01/17 00:20:21
>>144
ゲーデルとチューリングって無限ループは止まらないってことを言ってるのか。なんか意外だなぁ。
147:デフォルトの名無しさん
08/01/17 00:23:36
・止まる無限ループが存在すると仮定する
・矛盾する
・従ってすべての無限ループは止まらない
・証明終わり
148:デフォルトの名無しさん
08/01/17 00:25:33
>>146
無限という概念は数学的には不可解なのです。
149:デフォルトの名無しさん
08/01/17 00:33:04
ループや再帰を持つものはチューリング完全である。
↓
無限のループや再帰は止まらないことがある。
↓
判定不能な問題が存在する。
↓
チューリング完全なプログラミング言語は万能ではない!
↓
プログラマーに出来ることには限界がある。
↓
バカの壁(Q.E.D.)
150:デフォルトの名無しさん
08/01/17 00:38:48
ゲーデルとチューリングってバカの壁ってことを言ってるのか。なんか意外だなぁw
151:デフォルトの名無しさん
08/01/17 00:42:36
バカの壁という概念は数学的には無限ループなのです。
152:デフォルトの名無しさん
08/01/17 01:10:59
量子論的にはどんな壁でもすり抜けられるけどね。
153:デフォルトの名無しさん
08/01/17 01:34:23
確率が低いだけだな
154:デフォルトの名無しさん
08/01/17 01:38:18
本当によくわからないんです><
155:デフォルトの名無しさん
08/01/17 09:54:11
関数型初心者→Haskellかじって→SICP読み始める→Scheme素晴らしい
な人間ですが、Lisperから見たとき、Haskellってどんな印象なんでしょうか。
156:デフォルトの名無しさん
08/01/17 10:16:02
止まるなら止まる
止まらないかもしれないと止まらないかもしれないと止まらないかもしれないと....
という「半アルゴリズム」なんだな
157:デフォルトの名無しさん
08/01/17 13:14:48
>>155
「なんて純粋な関数型!しかも遅延!」
158:デフォルトの名無しさん
08/01/17 13:35:51
なぜかわからんが、昔から俺には
「遅延」っていう響きがいやらしく感じるんだ。
159:デフォルトの名無しさん
08/01/17 14:00:35
>>155
Lisper一般ではなく、あくまで俺の印象だが、
「純粋すぎてちょっとめんどい」って感じ。
たぶん誤解なんだろうけど。
160:155
08/01/17 14:16:28
なるほど、ちょっとメンドイというのは、Schemeの芸術的シンプルさから見たら
色々煩すぎるよ、ということでしょうか。
161:デフォルトの名無しさん
08/01/17 14:16:43
> Haskell
数学や哲学の匂いに比べて、肝心の(という言い方はトゲがあるかな)工学の匂いが薄い、
という風に感じる。
でもこれは、2chのスレや、関数型言語関連の検索で引っかかったページからの印象で、
実際にHaskellに触ったことは無いんで、>>159と同じく、色々誤解もあるんだろうなと想像。
162:デフォルトの名無しさん
08/01/17 14:36:20
>>160
ちょっと違うかな。
LispでもSchemeでも、関数型風に書くこともできれば、手続き風に書くこともできるよね。
純粋関数型言語ってのはそういう融通が効かなさそうで、用途によっては面倒じゃね?って
イメージ。たぶんいろんな逃げ道があって、そうでもないんだろうけど。
163:155
08/01/17 14:45:03
>>162
そうですね。言語の入門ってよく"Hello World"をコンソールとかに出力するのとか
から始まりますが。Haskellの場合それは典型的な副作用関数なので、モナドが
必要とか、そんな話になってしまいます。
164:デフォルトの名無しさん
08/01/17 18:06:23
>>155
Haskellみて思うのはUKの純粋関数型言語というイメージかな?
ML系やLisp系にはUKの言語みたいなこだわりは感じないかなぁ。
良いとか悪いとかいう感想は持ったことない。職人的なこだわりが感じられる。
165:デフォルトの名無しさん
08/01/17 18:23:28
やっぱLispは東海岸?
BSDが西海岸文化で。
166:デフォルトの名無しさん
08/01/17 18:57:24
どなたかSimply Schemeの紹介キボンヌ
167:デフォルトの名無しさん
08/01/17 21:21:03
>>165
もっと絞るとボストン周辺文化
168:デフォルトの名無しさん
08/01/17 21:33:55
>>155
俺と全く同じ状況でワロタ。
lispの構文はシンプルで美しいと、心から思ったよ。
169:デフォルトの名無しさん
08/01/18 01:12:10
URLリンク(www.oreilly.co.jp)
赤多過ぎ。
表紙が「Gaucheプログラミング」って表紙からして間違ってない?
ダイジョブカ?
170:デフォルトの名無しさん
08/01/18 01:38:34
>>169
逆に考えるんだ。それだけ改善される、と。
171:デフォルトの名無しさん
08/01/18 01:58:30
オレも頑張ってるなとオモタよ。
172:デフォルトの名無しさん
08/01/18 02:26:18
>>167
そりゃ偏見w
インディアナあたりもガンガってる。
173:デフォルトの名無しさん
08/01/18 03:43:26
>>163
「モナドが必要」って,一体何をそんなに仰々しく構えているのか.
何も考えずに putStrLn すればいいんですよ.
(write "Hello world!") (newline) と書くとき,Schemeの意味論を思い浮かべる?
;; そもそも意味論はRnRSの一部しか記述してないけど
174:デフォルトの名無しさん
08/01/18 12:25:47
ここにいる人たちは学生ですか?
あるいは社会人だけど趣味やスキルアップのためにSchemeを
やっているのですか?
仕事でScheme使ってる人はいるのでしょうか?
175:デフォルトの名無しさん
08/01/18 12:49:33
いつか仕事(個人的なutilじゃなく)で使えればなーと思いつつ、スキルアップのため
176:デフォルトの名無しさん
08/01/18 12:58:20
黒田さんとかshiroさんレベルになれれば、
「大丈夫俺に任せろ」で仕事にできちゃうんだろなぁ
177:デフォルトの名無しさん
08/01/18 13:15:20
普段は普通の手続き型言語やね、でも強いて言えば
再帰が必要な処理だけは手続き型言語で書こうとすると悩むから
一旦Schemeで下書きしてから手続き型に直す
178:デフォルトの名無しさん
08/01/18 13:17:57
>>173
むしろ、writeが再定義されてたらどうしよう、とか思い浮かべたほうがいい
179:デフォルトの名無しさん
08/01/18 13:19:28
>>174
いろんな人がいると思うよ。画一的に考えるな。
俺は仕事で使ってるよ。Common Lispだけど。
180:デフォルトの名無しさん
08/01/18 22:00:49
>>174
本職はハードの設計だが, できあいのツールで機能が足りないときは
Lisp で書いてるな. C とか C++ で数値計算する気にならん.
181:デフォルトの名無しさん
08/01/18 22:12:59
SIAGの廃れっプリが凄いw
182:デフォルトの名無しさん
08/01/18 22:40:51
無職の人はいるのか?
183:デフォルトの名無しさん
08/01/18 22:55:04
Lispme使ってますがなにか?
184:デフォルトの名無しさん
08/01/19 22:46:09
>>174
回路設計者(しかも、アナログ)だけど、趣味でschemeやってますよ。
185:デフォルトの名無しさん
08/01/19 23:58:15
意外とハードウェア技術者が多いな。俺も昔、Lisp系でHDL(ハードウェア記述言語)を作ろうとか
考えたことがあるよ。
186:180
08/01/20 01:07:07
>>185 wwWwWW!おまえはなんて俺なんだ!!!
187:デフォルトの名無しさん
08/01/20 01:07:34
Lisperなんだが、あまりにgaucheが素晴らしいのでschemerになろうと思う。
そこで質問なんだが、Lispだとnil==()なのにschemeだと#f != ()な理由ってあるの?
188:デフォルトの名無しさん
08/01/20 01:11:05
>>187
おそらく宗教的な理由
189:デフォルトの名無しさん
08/01/20 01:11:19
意味のない混同で、バグの温床となることがあるので、止めた。
190:デフォルトの名無しさん
08/01/20 01:24:49
>>185-186
俺が多すぎ
191:デフォルトの名無しさん
08/01/20 01:33:02
VHDLisp
192:デフォルトの名無しさん
08/01/20 01:45:17
>>26-154
Little Schemer ⇒ ゾウさんの絵 ⇒ 繰り返しはどこまで続くのか? ⇒ Yコンビネータ ⇒ To Mock A Mockingbird ⇒ ゲーデルの定理
読み返してみたらホントにそう書いてあった。すげー。
193:デフォルトの名無しさん
08/01/20 08:01:34
>>187
どんな所がいいですか?
194:デフォルトの名無しさん
08/01/20 08:28:45
SICPにネットリスト記述処理系とかあるし
195:デフォルトの名無しさん
08/01/20 09:12:55
おれの場合、elispと「リスト遊び」でリスト便利、って気付いて、
schemeを知ってやべぇ美しすぎる!とか思った。
でも今は仕事でCommonLisp(ACL)を少し使ってる。バカでかい仕様も、
今では信頼の元。CLは愛してるというより尊敬の対象。
196:デフォルトの名無しさん
08/01/20 13:39:49
おまえらループと再帰を使い分けるのは馬鹿らしいと思ってるだろ
配列と構造体とハッシュを使い分けるのも馬鹿らしいと思うことはないかい
197:デフォルトの名無しさん
08/01/20 13:42:24
そういう発想は無かったな。
使い分けるのが馬鹿らしかったら使い分けなきゃいいんじゃないか?w
198:デフォルトの名無しさん
08/01/20 13:47:21
>>196
> おまえらループと再帰を使い分けるのは馬鹿らしいと思ってるだろ
うん!
> 配列と構造体とハッシュを使い分けるのも馬鹿らしいと思うことはないかい
あんまおもわねぇなぁ
assoc と hash …
199:デフォルトの名無しさん
08/01/20 14:08:27
>>198
前スレでassocの書き方を色々とやってたな。4つぐらいあった希ガス。
でも使い分けるという感じではなかった。
200:デフォルトの名無しさん
08/01/20 15:09:18
> 配列と構造体とハッシュを使い分けるのも馬鹿らしいと思うことはないかい
JavaScriptなんかはそこらへんルーズなんで楽ちんではある
201:デフォルトの名無しさん
08/01/20 15:15:18
Lispでも「俺はハッシュしか使わん」というのは勝手なんだが
問題はキーを比較するときに多態性がないと不便ってことかな
202:デフォルトの名無しさん
08/01/20 16:06:12
>>196
Arcってそゆんじゃなかったっけ? alistとhashを抽象化したdbって。
>>200
久しぶりに書くと配列をiterateするのにfor(var in ary)で書いてしまって??となる
203:187
08/01/20 17:38:21
>>193
まずschemeで((if #t + -) 1 2)がでできることに感動
まだほとんど触ってないけどgaucheは
・速い(と聞いている)
・バインディングが書きやすい(ように見える)
・スレッドが使える
・dotimes, whileとかあるし、ライブラリが使いやすそう
defunとかmapcarなくて戸惑ってるけど、これから勉強します
204:デフォルトの名無しさん
08/01/20 18:44:45
>203
define
map
205:デフォルトの名無しさん
08/01/20 19:07:12
hash と assoc は計算量がちがうよね。
用途に合わせて使い分けるもんじゃないの?
206:デフォルトの名無しさん
08/01/20 19:18:13
まだconsのところだけど、Little Schemer面白くなってきた。
再帰は苦手だけど、この本の再帰の妥当性チェックの仕方の
説明が良かった。コツを掴めそう。
207:デフォルトの名無しさん
08/01/20 19:27:45
>>205
> 用途に合わせて使い分けるもんじゃないの?
どの辺で切り分けるかでいつも迷う.
208:デフォルトの名無しさん
08/01/20 19:32:14
大きいときはハッシュテーブル。
後で追加したものを優先したくて、一発である時点へ戻したいという場合は連想リスト。
どちらでもなければ、どちらでもいい。w
209:デフォルトの名無しさん
08/01/20 19:33:08
URLリンク(www.amazon.com)
The Scheme Programming Language, 3rd Edition
米国では評価高いみたいですが読んだ人どうですか?
210:デフォルトの名無しさん
08/01/20 19:54:09
>>208
> どちらでもなければ、どちらでもいい。w
ここだろ? >>207 が頭抱え込んでるのは…
211:デフォルトの名無しさん
08/01/20 19:57:08
小さいなら連想リストでいいべ
212:デフォルトの名無しさん
08/01/20 20:04:36
CやC++なんか知らねえ。
おれはscheme一筋って人いますか?
213:デフォルトの名無しさん
08/01/20 20:16:13
>>212
さすがに高級アセンブラであるところの C を知らねぇって奴はいないんじゃねぇの?
C++ とはあまりお近づきになりたくないのは確だけど。W
214:デフォルトの名無しさん
08/01/20 20:27:52
C知らないことはないけど、大規模なのは作ったことないorz
215:デフォルトの名無しさん
08/01/20 20:51:28
>>209
巻末の仕様書。
216:デフォルトの名無しさん
08/01/20 21:20:23
Scheme処理系を今時オールアセンブラで書こうっつう漢はいねぇべ
217:デフォルトの名無しさん
08/01/20 21:32:41
(defun my-foreach (proc-list 'val-list)
(if (not (cdr var-list))
(proc-list (car val-list))
(progn
(proc-list (car val-list))
(my-foreach proc-list (cdr val-list)))))
(setq list-a '(1 2 3 4))
(1 2 3 4)
(my-foreach '(lambda (x) (print x)) 'list-a)
foreachのような関数をlispで作ろうと考えたのですが、どうもうまくいきません。
上記のようにするとlist-aがvoidだと怒られてしまいます。
218:デフォルトの名無しさん
08/01/20 22:00:18
>>216
ツウジテナイw
219:デフォルトの名無しさん
08/01/20 23:03:13
>>216
8008の頃からマイクロプロセッサさわってると衝動的にその罠に落ちる。
#でもarm7とかだと今でも有効なキガス
220:デフォルトの名無しさん
08/01/20 23:21:24
話の流れが見えない
>>213 は (equal? C 高級アセンブラ) => #t
>>216 のは (equal? C アセンブラ) の評価結果はどうなるんだ?
221:デフォルトの名無しさん
08/01/20 23:28:24
>>220 天使のオペレータ
amb!
amb!
222:デフォルトの名無しさん
08/01/20 23:45:42
>>220
そうだと思う。>>216,>>219は妙だw
223:デフォルトの名無しさん
08/01/21 00:30:54
>>217
どこから突っ込めばいいのか……
とりあえず val-list の引用符いらない
224:デフォルトの名無しさん
08/01/21 00:31:31
>>217
(defun my-foreach (proc-list val-list)
(if (not (cdr val-list))
(funcall proc-list (car val-list))
(progn
(funcall proc-list (car val-list))
(my-foreach proc-list (cdr val-list)))))
(setq list-a '(1 2 3 4))
(1 2 3 4)
(my-foreach #'(lambda (x) (print x)) 'list-a)
schemeと違ってlispはfuncallしないと関数は呼び出せないよ。
225:デフォルトの名無しさん
08/01/21 00:49:15
あ、list-aにクォート付いてたw
(my-foreach #'(lambda (x) (print x)) list-a)
226:デフォルトの名無しさん
08/01/21 01:54:50
>>224
なるほど、勉強になりました。どうもです。
227:デフォルトの名無しさん
08/01/21 02:57:56
>>209
全文公開されてるから読め。
228:デフォルトの名無しさん
08/01/21 12:51:48
Schemeの「継続」ってのをわかりやすく教えてくれないか。
自分的にはドラえもんの「人生やり直し機」みたいなイメージをもっているんだが。
229:デフォルトの名無しさん
08/01/21 13:33:40
なんでも継続 でググ(略
230:デフォルトの名無しさん
08/01/21 14:16:46
>>228
的確なイメージですね
231:デフォルトの名無しさん
08/01/21 15:16:38
まずは人生やり直し機の実装について語ろうか
232:デフォルトの名無しさん
08/01/21 17:03:49
ファーストクラスの継続は、やり直せる。
ファーストクラスの人生は、やり直す必要がない。
233:デフォルトの名無しさん
08/01/21 22:11:06
>>232
で、ファーストクラス未満の人生は、やり直しが効かないと…
234:デフォルトの名無しさん
08/01/21 22:44:04
人生は不可逆だからやり直しはできないだろうけど、
出直しならできるんじゃない。本人は変われないが環境を変えることはできる。
Schemeだと昔の環境を保存しておいて復元した環境に飛び込んでいくんでないの。
235:デフォルトの名無しさん
08/01/21 23:38:56
>>234
人生に関しては逆だよ、変わるのは環境じゃなく自分。
乱暴に言えば自分しか変われる要素は無い。
236:デフォルトの名無しさん
08/01/21 23:40:27
人生の話はスレ違いですよ
237:デフォルトの名無しさん
08/01/22 01:22:28
lispは人生
238:デフォルトの名無しさん
08/01/22 11:29:02
Schemeは哲学
239:デフォルトの名無しさん
08/01/22 21:09:16
C#は成功
240:デフォルトの名無しさん
08/01/22 21:26:31
Cは仕事
241:デフォルトの名無しさん
08/01/22 21:41:12
国歌がないぞ
242:デフォルトの名無しさん
08/01/22 21:50:38
国家はコッカだけに、
「静かな湖畔の...」と対になる曲が必要だな。
243:デフォルトの名無しさん
08/01/23 08:33:14
>>176
>黒田さんとかshiroさんレベルになれれば、
shiroさんはコードとか読んでも本当に凄いと思うんだけど、
黒田さんって凄いの? どっかで氏が書いたコード読めますか?
どんだけ凄いのか是非読んでみたい。
話だけ聞いてると名物*ANSI* CL厨親父にしか思えない人が多い気がする。
244:デフォルトの名無しさん
08/01/23 08:34:53
gauche で cons, list に nil 渡すとエラーになる。
これは gauche の仕様っていう認識で OK?
245:デフォルトの名無しさん
08/01/23 08:40:36
schemeにnilなんてあったっけ?
246:デフォルトの名無しさん
08/01/23 09:49:23
>>245
そもそもないのね。
SICP に書いてあったから、あるのかと思った。
247:デフォルトの名無しさん
08/01/23 12:01:03
(define nil '())
248:デフォルトの名無しさん
08/01/23 14:03:19
'()や#'(lambda ...)のクオートは省略できる?
というか何故クオートつけるのか分からない…
249:デフォルトの名無しさん
08/01/23 15:10:53
前者については
Schemeの場合は()は自己評価的でないからクォートしなければならないとR5RSに明記されている
空リストはアトムだから自己評価的だという考え方もできるけど
リストだからクォートしなければならないとも考えられる。
個人的には自己評価的のほうが自然だと思えるけど。
CLなら自己評価的だからクォートしなくてもいい。
後者については
CLの場合はクォートしない(lambda ...)はlambdaマクロとして評価されて
#'(lambda ...)に展開される。(らしい。CLはよく知らない)
#(...)もCLだと自己評価的、Schemeだとクォートしなければならないけど
自己評価的でいいのに。
250:デフォルトの名無しさん
08/01/23 16:39:52
なるほどありがとう
色々弄ってたら酷い例を見つけてしまった
(flet ((function (x) x)) #'(lambda (x) x))
251:デフォルトの名無しさん
08/01/23 16:43:34
>>249
をいをい。#(...) は配列だぞ。#' でひとかたまり。
252:デフォルトの名無しさん
08/01/23 18:57:53
>>251
違う話だからパラグラフを分けたのに><
253:デフォルトの名無しさん
08/01/23 20:07:52
適当な接続詞も入れればよかったね
254:デフォルトの名無しさん
08/01/23 20:25:28
ちなみにとか
255:デフォルトの名無しさん
08/01/23 20:40:14
いや普通わかるだろw
256:デフォルトの名無しさん
08/01/23 21:40:53
いまさらだけど”空リストはアトムだから自己評価的”って
シンボルの例があるから妙な主張でしたね
Schemeの場合#'が(syntax ...)に展開される処理系もあるってことも最初書いてたんだけど
さすがにこの話ではないと思って削って
ついでに#(...)の段落を足したんでした
どこかでCLにおける#()は(vector ...)に展開される入力マクロだからクォートしないって見たような気がするけど
違いますよね?
257:デフォルトの名無しさん
08/01/23 21:46:40
CLにおける#()は入力マクロだけど、そういう話とは別に配列というもの
自体が自己評価的。つまり、何度 eval しても変わらない。
258:デフォルトの名無しさん
08/01/24 00:44:50
>>243
トークショーでの黒田さんのツッコミ能力はすごいぞ。その点期待はずれなのが小飼弾だ。
259:デフォルトの名無しさん
08/01/24 00:46:52
それって的確な突っ込みがビシバシ来る感じ?
260:デフォルトの名無しさん
08/01/24 00:57:37
>>243最初の記事が煽りっぽかったからな。おれも最初は define-syntax しらねーのかよ、とか思ってたクチだが、俺がアホなだけだった…。
まぁ WiLiKi の Scheme:マクロ:CommonLispとの比較:意味論 で Shiro さんが「黒田さんに指摘されてはたと膝を打った次第です。」と書くくらいだからね。
「名物*ANSI* CL厨親父」ってのは初耳な単語だが、まずもうちょっと謙虚に相手の言う事を考える事も必要だと思うよ。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5370日前に更新/210 KB
担当:undef