08/01/14 00:14:56
過去スレ
Part18: スレリンク(tech板)
Part17: スレリンク(tech板)
Part16: スレリンク(tech板)
Part15: スレリンク(tech板)
Part14: スレリンク(tech板)
Part13: スレリンク(tech板)
Part12: スレリンク(tech板)
Part11: スレリンク(tech板)
Part10: スレリンク(tech板)
Part9: スレリンク(tech板)
Part8: URLリンク(pc5.2ch.net)
Part7: URLリンク(pc5.2ch.net)
Part6: URLリンク(pc3.2ch.net)
Part5: URLリンク(pc3.2ch.net)
Part4: URLリンク(pc.2ch.net)
Part3: URLリンク(pc.2ch.net)
Part2: URLリンク(pc.2ch.net)
Part1: URLリンク(piza2.2ch.net)
2:デフォルトの名無しさん
08/01/14 00:16:31
□参考リンク□
日本Lispユーザ会(日本語) URLリンク(jp.franz.com)
ここにかなりの情報があります。 削るとAllegro Common Lispのページへ
プログラミング言語Scheme(日本語)
URLリンク(www.sci.toyama-u.ac.jp)
Schemeの人はまずここを見ましょう。
Lisper への道(日本語)
URLリンク(www.geocities.co.jp)
判りやすいLISP入門サイト。
Schemeへの道(日本語)
URLリンク(www.stdio.h.kyoto-u.ac.jp)
ここはschemeの入門サイト。
慶応の授業のページ・記号処理プログラミング 2001
URLリンク(buri.sfc.keio.ac.jp)
Practical Scheme(日本語)
URLリンク(practical-scheme.net)
「普通のやつらの上を行け」など、興味深い文書を沢山翻訳されてます。
(Gaucheという完成度の高いscheme処理系作者さんのページでもあります。)
3:デフォルトの名無しさん
08/01/14 00:17:08
□仕様関係□
CLtL2: Common Lisp the Language 2nd edition
URLリンク(www-2.cs.cmu.edu)
CLHS: Common Lisp Hyper Spec
URLリンク(www.ai.mit.edu)
R5RS: Revised(5) Scheme(ja)
URLリンク(www.sci.toyama-u.ac.jp)
□SICP関係□
SICP(英語)
URLリンク(mitpress.mit.edu)
「計算機プログラムの構造と解釈」の原書です。 全てオンラインで読めます。
計算機プログラムの構造と解釈 第二版 (snip) に関連するホームページ
URLリンク(www.ipl.t.u-tokyo.ac.jp)
SICPの回答集
URLリンク(www.melt.kyutech.ac.jp)
URLリンク(pluto.aurorasd.co.jp)
URLリンク(www.ipl.t.u-tokyo.ac.jp)
URLリンク(www.sampou.org)
4:デフォルトの名無しさん
08/01/14 00:17:58
□wikipedia関連□
URLリンク(ja.wikipedia.org)
URLリンク(ja.wikipedia.org)
URLリンク(ja.wikipedia.org)
□継続□
なんでも継続
URLリンク(practical-scheme.net)
Schemeへの道:継続
URLリンク(www.stdio.h.kyoto-u.ac.jp)
継続の使い方
URLリンク(www.geocities.co.jp)
継続の使用法
URLリンク(www.ice.nuie.nagoya-u.ac.jp)
CPS(継続渡しスタイル)の説明
URLリンク(www.csl.sony.co.jp)
Kahua: 継続ベースのアプリケーションサーバー
URLリンク(www.kahua.org)
5:デフォルトの名無しさん
08/01/14 00:18:23
□その他□ (便利な情報リソース)
John McCarthy's Home Page
URLリンク(www-formal.stanford.edu)
LISPの生みの親、J・マッカーシーのページだそうです。
Association of Lisp Users 米国のLispユーザ会
URLリンク(www.alu.org)
CMUのLisp Repository 新旧様々なプログラムが置いてある
fURLリンク(ftp.cs.cmu.edu)
The Common Lisp Cookbook: いわゆる Cookbook
URLリンク(cl-cookbook.sourceforge.net)
Bibliography of Scheme-related Research Scheme関連の論文リンク集
URLリンク(library.readscheme.org)
Scheme Hash(英語) S式でXMLを使える様にするSXMLなど
URLリンク(okmij.org)
幻の「入門Scheme」 オンラインで読める
URLリンク(www4.ocn.ne.jp)
各種scheme処理系をcygwin上からビルドする方法など。
URLリンク(www.geocities.co.jp)
encyCMUCLopedia (cmucl以外でも有益なはず )
URLリンク(www.isr.ist.utl.pt)
6:デフォルトの名無しさん
08/01/14 00:23:24
□実装□
Bit (mini-schemeよりも小さい(?)bytecode変換系 )
URLリンク(www.iro.umontreal.ca)
Lisp 言語処理系: CAMPUS LIsP, Lemon version (Cでわずか1000行)
URLリンク(aten.aial.hiroshima-u.ac.jp)
Schemix (Linuxのkernelへのパッチで/dev/として扱えるTinyScheme )
URLリンク(www.abstractnonsense.com)
awkで書かれたわずか500行のLispインタプリタ
URLリンク(www.accesscom.com)
Schemeで書かれた正規表現ライブラリ
URLリンク(www.cs.rice.edu)
Tiny CLOS Tutorial
URLリンク(home.adelphi.edu)
Hotdog Scheme MS が金出してたみたい
URLリンク(rover.cs.nwu.edu)
Bigloo CLR 用のコードを吐けるようになったらしい
URLリンク(www-sop.inria.fr)
SECDR-Scheme: SECD machine model に基づく実装
URLリンク(lily.fan.gr.jp)
Minischeme: 1 ファイルに凝縮された Scheme 処理系
URLリンク(tinyscheme.sourceforge.net)
TinyScheme: Minischeme を色々弄ったもの
URLリンク(tinyscheme.sourceforge.net)
KI-Scheme, AM-Scheme, etc...
URLリンク(www.nifty.com)
LispMe: Palm 上で動く Scheme 処理系. これも SECD virtual machine.
URLリンク(www.lispme.de)
7:デフォルトの名無しさん
08/01/14 00:24:21
□実装その2□
Scheme48: R5RS準拠のSchemeのバイトコードインタプリタ
URLリンク(www.s48.org)
Guile: GNUの拡張プログラミング言語
URLリンク(www.gnu.org)
Gambit-C: R5RS準拠のScheme処理系
URLリンク(www.iro.umontreal.ca)
Gauche: R5RS準拠のScheme処理系。Shiro Kawaiさん作。近々書籍が出版されます。
URLリンク(practical-scheme.net)
8:デフォルトの名無しさん
08/01/14 00:26:44
□その他□ (抜け)
LISP Scheme Part9 (html化) って、なんでこれだけ
URLリンク(ruku.qp.tc)
独習 Scheme 三週間 (Schemeの教科書 )
URLリンク(www.sampou.org)
Cliki (CLコードがたくさん紹介されている。)
URLリンク(www.cliki.net)
よろずや (lispの実用的な情報が色々。 )
URLリンク(www.geocities.co.jp)
Common-Lisp.net: 多くのプロジェクトがホスティングされてる
URLリンク(common-lisp.net)
Bill Clementson's Blog: Lisp関連の話題が中心のBlog
URLリンク(home.comcast.net)
Practical Common Lisp: S式の羅列で現実的な問題をどう解くのかそのギャップに悩まされてる人に
URLリンク(www.gigamonkeys.com)
□イベント□
GaucheNight(2007-05-09)
URLリンク(practical-scheme.net)
川合史朗、黒田寿男、まつもとゆきひろ(Skype中継)、小飼弾、
伊東勝利、久井亨、小黒直樹、ほか
黒田氏関係 (黒板の人)
スレリンク(tech板:901-909番)
URLリンク(cl-www.msi.co.jp)
Scheme:マクロ:CommonLispとの比較
URLリンク(practical-scheme.net)
Script Languages
URLリンク(cl-www.msi.co.jp)
9:デフォルトの名無しさん
08/01/14 00:27:27
□書籍□
プログラミングGauche
・著者:川合史朗 監修
Kahuaプロジェクト 著
・定価:3360円(本体3200円+税)
・B5変 464頁
・ISBN 978-4-87311-348-7
・発売日:2008/02
URLリンク(ssl.ohmsha.co.jp)
10:デフォルトの名無しさん
08/01/14 00:31:17
□2ch上にあるLISP関係のスレ□ (現在)
【入門】Common Lisp その3【質問よろず】
スレリンク(tech板)
【CGI】実用比較Lisp vs C/C++【GUI】
スレリンク(tech板)
【魔法】リリカル☆Lisp【言語】
スレリンク(tech板)
Lisp@UNIX版
スレリンク(unix板)
Emacs Lisp 3
スレリンク(tech板)
【ヤパーリ】XMLをS式に置換えていくスレ【LISP最強】
スレリンク(tech板)
11:デフォルトの名無しさん
08/01/14 00:32:05
10の抜け
【SICP】計算機プログラムの構造と解釈【Scheme】
スレリンク(tech板)
12:デフォルトの名無しさん
08/01/14 00:35:09
リンク訂正+追加
プログラミング言語Scheme(日本語)
URLリンク(www.sci.u-toyama.ac.jp)
SBCL Buildbot
URLリンク(sbcl.static.net)
LispUser.net (よろずや?)
URLリンク(lispuser.net)
R6RS
URLリンク(www.r6rs.org)
13:デフォルトの名無しさん
08/01/14 00:37:50
ほとんどコピペ
こんなもんでよかったでしょうか
14:デフォルトの名無しさん
08/01/14 00:41:41
□ライブラリ関係□
SLIB
URLリンク(www-swiss.ai.mit.edu)
SRFI
URLリンク(srfi.schemers.org)
15:デフォルトの名無しさん
08/01/14 00:48:06
>>2 リンク先変更
プログラミング言語Scheme(日本語)
URLリンク(www.sci.u-toyama.ac.jp)
Schemeの人はまずここを見ましょう。
16:デフォルトの名無しさん
08/01/14 00:55:12
Meadow memo: 2ちゃんねるログ
URLリンク(www.bookshelf.jp)
dat落ちした過去スレの一部が見られます。
17:デフォルトの名無しさん
08/01/14 01:20:41
R5RSの原文
URLリンク(www-swiss.ai.mit.edu)
18:デフォルトの名無しさん
08/01/14 02:00:12
(乙 >>1)
19:デフォルトの名無しさん
08/01/14 02:59:31
(scheme '笑)
20:デフォルトの名無しさん
08/01/14 07:05:39
前スレ最後の80レスくらいは本当に無意味だったな…
21:デフォルトの名無しさん
08/01/14 07:12:37
それ以前だってどうでもいい話の方が多いと思うけど…
22:デフォルトの名無しさん
08/01/14 07:17:32
いや、あそこまで酷くはなかった
まあ連休中だから仕方が無いか…
23:デフォルトの名無しさん
08/01/14 07:25:25
よく荒れると夏休みだの冬休みだの言うけど、普段来ないやつは連休でも来ないよ
24:デフォルトの名無しさん
08/01/14 07:41:26
そんな調査をいつどこでやったんだ?
25:デフォルトの名無しさん
08/01/14 07:47:31
逆だってわからんでしょ。
無意味なレスばっかだからもうやめとく。
生意気言ってすみませんでした。
26:デフォルトの名無しさん
08/01/14 13:30:14
Little Schemerを読み進めてるんですが、
lat?というものが出てきて、(lat? '(a b c))
を試したのですが、latが解釈されないようです。
これは何を意味するもので、何か定義しなければ
いけないんでしょうか? 真偽値を返すのはわかり
ますが何をask forしてるのかわかりません。
27:デフォルトの名無しさん
08/01/14 13:31:29
すみません。次のページに書いてありました。
意味はわかりませんが。
28:デフォルトの名無しさん
08/01/14 14:32:20
本の読み方がわかってきました。
29:デフォルトの名無しさん
08/01/14 17:27:19
>>26
あのゾウさんの表紙がいいね。あの表紙の再帰はどこまで続くのだろう。
30:デフォルトの名無しさん
08/01/14 22:42:30
>>29
∞のハズだと思ったがよく考えてみると、ゲーデルによって再帰的なラムダ計算の無矛盾性はその論理の範疇では証明できないことが示されている(不完全性定理)ので、
結論としては判らないということになるw
31:デフォルトの名無しさん
08/01/14 22:46:11
Little Schemerの絵をよくみるとLittle Lisperのまま残ってるのにワロタ
32:デフォルトの名無しさん
08/01/14 22:50:22
>>30
それ、Little SchemerのChapter 9で出てくるYコンビネータのネタだね。
カリー・ハワード同型対応やYコンビネータによる再帰定義で喜んでると、不意にゲーデルにがっかりさせられるというオチが待っているw
33:デフォルトの名無しさん
08/01/14 23:05:54
Seasoned SchemerとReasoned SchemerもLittle Schemerと同じ
アプローチなんですか?結構気に入ったので買おうか迷ってます。
34:デフォルトの名無しさん
08/01/14 23:17:01
>>33
おなじアプローチ。買ってOK。
Seasoned Schemerは続編で第2巻に相当。遅延評価とかの説明。
Reasoned SchemerはScheme上にProlog処理系のような論理型を導入する方法について。第3巻に相当。
3つ読めばSICPに近い知識は得られる。それからSICP読めばすらすら読める。
35:デフォルトの名無しさん
08/01/14 23:19:04
>>32
チャーチ・ロッサーの定理も忘れずにw
36:デフォルトの名無しさん
08/01/14 23:31:19
>>34
Little Schemerの巻末に文献紹介があるよね?
Smullyan "To Mock a Mockingbird"という本も激推奨!
SKIコンビネータ理論について判りやすく説明してくれる。あらゆる演算を鳥に例えていて、実は26の鳥から作れるという話。
しかもこの26種も実はSコンビネータとYコンビネータから作ることができ、さらによく考えるとこの2つもXコンビネータから作れて、大団円。
このSKIコンビネータ理論というのがSchemeの理論的基礎のλ算法というもので、Schemeで使うlambdaもこれに由来するんだよ。
読むと凄く理解が深くなるのでお勧め。
37:デフォルトの名無しさん
08/01/14 23:32:21
>>34
なるほど。チェックしときます。とりあえずLittle Schemerで
苦手な再帰の概念の基礎固めをしたいと思います。Schemeは
C++のBoost MPLにも活かせそうですね。
38:デフォルトの名無しさん
08/01/14 23:32:30
× しかもこの26種も実はSコンビネータとYコンビネータから作ることができ、
○ しかもこの26種も実はSコンビネータとKコンビネータから作ることができ、
39:デフォルトの名無しさん
08/01/14 23:37:22
>>36
難しそうですが、Schemerシリーズを終えたらチェックしてみます。
先が楽しみです。
40:デフォルトの名無しさん
08/01/14 23:40:49
ものまね鳥をまねるって奴かな
最近新古本を手に入れた
高かった
ちょこっと読んだけど難しい
鳥のたとえ話が
41:デフォルトの名無しさん
08/01/14 23:54:08
>>37
C++のBoost MPLに活かせることもあるけど適材適所で使い分けた方がいい。
オブジェクト指向と関数型では基本的なアルゴリズムも全く違う。
42:デフォルトの名無しさん
08/01/14 23:55:55
>>40
日本語だから例えになっていない。英語ならそのままコンビネータの名前だし、説明もコンビネータの働きに対応している。
原書推奨。
43:デフォルトの名無しさん
08/01/15 00:06:47
Combinator Birds
URLリンク(www.angelfire.com)
SKIコンビネータのSKIはそれぞれ:
Starling
Kestrel
Identity Bird (aka Idiot)=SKK
に対応している。
44:デフォルトの名無しさん
08/01/15 01:00:42
お前等あたまいいんだな。
都内の人、Schemerシリーズどこで買ったのかいくらだったのか教えろください。
45:デフォルトの名無しさん
08/01/15 01:08:35
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
T (???:Thrush)=CI
R (コマドリ:Robin)=BBT
W (ムシクイ:Warbler)=C(BMR)
Y (賢人鳥:Why bird)=SLL
46:デフォルトの名無しさん
08/01/15 01:14:46
>>44
アマゾソ.jpで\3500ぐらいでゲト。
47:デフォルトの名無しさん
08/01/15 01:18:44
邦題は「賢人鳥をまねる」の方が内容を表わしていて良かった気がする。
英題は"To kill a mocking bird(アラバマ物語)"をもじっているけど「ものまね鳥をまねる」だと意味がないw
48:デフォルトの名無しさん
08/01/15 01:41:37
lambda booksで2000円と書いてあるが買い方がわからん。
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〃゙〉 }¦ } ハ ヽ、}
..ノ /ハ 〔 ∠ノ乂 {ヽ ヾ丶ヽ ヽ >>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厨親父」ってのは初耳な単語だが、まずもうちょっと謙虚に相手の言う事を考える事も必要だと思うよ。
261:デフォルトの名無しさん
08/01/24 01:05:38
そういや昔のスレでも感情むきだしな奴がいたな。Scheme派としては気持はわかなくもないけど
262:デフォルトの名無しさん
08/01/24 01:33:28
WiLiKiを読んで思ったが
<expression>が<datum>であるべきだと仮定すると、
()がreadされた時点で自己評価的なオブジェクトになってるわけだから
やっぱり(quote ())というのは冗長だよなぁ
263:デフォルトの名無しさん
08/01/24 01:40:22
今更な気もするけど、>>2の慶応SFCの
授業ページ(記号処理プログラミング)のリンク切れてるね。
とりあえず2007年度のもの。
URLリンク(web.sfc.keio.ac.jp)
264:デフォルトの名無しさん
08/01/24 16:55:36
「入門CommonLisp 関数型4つの特徴とλ計算」(新納浩幸著)
この本、いいなぁ。8章からラムダ計算のこと、Lispによって具体的に説明している。
高橋正子先生の教えを受けたんだ。茨城に住んでいたらぜひとも聴講に行きたいところだ。
265:デフォルトの名無しさん
08/01/24 17:11:47
>>264
そいつのブログ見てみろよ。ひどいぜ。
愚痴ばっかだし、自分の研究室の学生をバカにするようなことまでブログに書くんだぜ。
とても大学の教員とは思えない幼稚な記事ばかり。
266:デフォルトの名無しさん
08/01/24 17:27:52
>>264
8章は良いですね。
URLリンク(book.mycom.co.jp)
わかっていて買う人は良いですけど。
タイトル買いをしてCommon Lispの入門に使えないのは残念だと思います。
プログラムをCommon Lispで動くかどうかも試してないみたいですし。
267:264
08/01/24 17:42:27
>>265
>>266
なるほど~、そうなんだ。
FXはちょっとだな...プロにかもられなきゃいいけど。
268:264
08/01/24 22:03:16
でも、本はなかなか良いと思う。
黄金比の固有値、固有ベクトルなんかにも触れていたり。
数学へのモチベーションも上がるし高校生なんかにはいいんじゃないかね。
269:デフォルトの名無しさん
08/01/24 22:20:40
本人自演乙
270:デフォルトの名無しさん
08/01/24 23:28:11
>>268
> 黄金比の固有値、固有ベクトルなんかにも触れていたり。
で, どのあたりが
> 数学へのモチベーション
につながるのかな?
271:デフォルトの名無しさん
08/01/25 01:15:13
入門の入門には悪くないと思う
自分はλ計算についてこの本で知った
そしてすぐに高橋正子の計算論、グレアムのAnsi Common Lisp、ディヴィグのプログラミング言語Schemeを買ってどっぷりはまったクチ
でも「代入文は使わない」のところで(Cの)初期化と代入を混同してるような文章がある等
あちこち気になる点があるのも事実
それに高校生の「数学への」モチベーションにはならないと思う
だけどLispやλ計算を知るきっかけになってくれたことには感謝してる
(λ記法は知ってたけどλ算法は知らなかった)
272:デフォルトの名無しさん
08/01/25 01:16:53
入計算λ門
ぱっと見わからないなw
ごめんなさい
273:デフォルトの名無しさん
08/01/25 01:28:58
数学もプログラミングもほとんど素地なくても(←念のため俺のこと)
あの入門本から計算論ていけるもんですか?
274:デフォルトの名無しさん
08/01/25 01:33:24
君の素地次第だからなんとも言えない
275:デフォルトの名無しさん
08/01/25 01:45:57
じゃあ逆に、、どんな素地の人がそんなに一気にはまったのですか?
276:デフォルトの名無しさん
08/01/25 01:55:49
それは逆になっていませんよ
277:271-272
08/01/25 02:02:46
274は271じゃないけど
自分は素地というよりλ計算の美しさに魅せられたからだと思ってる
278:271-272
08/01/25 02:09:56
あ、それから計算論はまだ読破できてません
自分の素地といえば
・車輪の再発明が大好き
・Smalltalkに惚れた
・MIPSのアーキテクチャに惚れた
・Windows、32bitのx86を毛嫌いしている
・今はSchemeに夢中
・でも一番美しいのはλ式だと思ってる
「美しいものを嫌いな人がいるのかしら?」ってとこかなw
279:デフォルトの名無しさん
08/01/25 02:10:00
ディヴィグ本買いそびれてオジサン涙目 orz
280:デフォルトの名無しさん
08/01/25 02:15:28
美しいものを嫌いな人はあまりいないだろうが美的センスは個々によってだいぶ違うだろうな
281:271-272
08/01/25 02:25:15
そうですね
λ式よりもコンビネータ理論のほうが美しいと言う人もいますしね
282:デフォルトの名無しさん
08/01/25 03:05:23
多少不細工でも料理の上手い子のほうがいいよ
283:デフォルトの名無しさん
08/01/25 04:07:48
Perlか。>不細工だけど料理は出来る
284:デフォルトの名無しさん
08/01/25 05:13:37
>>270
大学1年で線形代数をみっちりやるじゃない。
後期で固有値、固有ベクトルをやったんだけどその応用のひとつ。
フィボナッチ数列が行列の積として表せて固有値を計算すると黄金比
がでてくるなんてすごいじゃんと思った。
萩谷先生の「関数プログラミング」にもそういう題材があったと思う。
本はどこに片付けたかわからなくて確かめられないけど、たしか
あったと思う。
高校でやる行列やベクトルが実はとても面白い分野と将来結びついてくる
ということを知ればもっともっと数学が楽しくなると思う。
285:275
08/01/25 08:35:20
サンキューララァ。なんとなくだけどわかりました。
286:デフォルトの名無しさん
08/01/25 13:25:08
固有値に黄金比が出てくるのは大学受験の時知ったけど…
287:デフォルトの名無しさん
08/01/25 15:50:30
高校生の時、勉強さぼってたんでよくわからないけど、
優秀な人は高校の時に固有値、固有ベクトルに慣れ親しんでるらしいね。
萩谷先生の本だったかエッセーだったかに「高校時代に慣れ親しんだ...」みたいな
話があったと思う。
288:286
08/01/25 19:31:03
固有値やったのは俺が旧課程だからかもしれないな。
だって優秀じゃないし(^_^;)
289:デフォルトの名無しさん
08/01/25 19:42:59
CやC++で窓のGUI書くのとLISPで書くのどっちがお手軽かな・・・
290:デフォルトの名無しさん
08/01/25 20:05:52
最近はC#が楽すぎワロタっていう感じ。
291:デフォルトの名無しさん
08/01/25 20:46:10
やっぱKawaでしょ
292:デフォルトの名無しさん
08/01/25 22:44:59
>>278
Lisp系だと「原理主義」にどう対応するかで派閥があるからなぁ。
293:デフォルトの名無しさん
08/01/25 23:50:56
>>278
単なる茶々だけど
> ・MIPSのアーキテクチャに惚れた
NIPS 32bit: シンプルでかわぇぇ!!!
MIPS 64bit: バッチィ… 特にアドレス空間周りがorz
消防とか厨房とかの頃, 好きだった女の子に同窓会でであったら… … …
てな, 心境だったな > MIPS 64bit
294:デフォルトの名無しさん
08/01/25 23:52:33
>>279
> ディヴィグ本買いそびれてオジサン涙目 orz
げええっ、絶版かよ!俺もまだ買ってないのに!
URLリンク(www.amazon.co.jp)
> 現在在庫切れです。この商品の再入荷予定は立っておりません。
295:デフォルトの名無しさん
08/01/26 00:24:54
>>293
激しく同意です
R3000はイカスけどR4000はイケてない
遅延スロット使ってストールなしに分岐できるのがクールなのに
といいつつ一番弄ったMIPSはEmotionEngine(^^;)
>>294
某大手書店の最後の一冊買っちゃった
日本語版の初版第2刷
オライリーさん、>>209の日本語版よろしくです
296:デフォルトの名無しさん
08/01/26 00:46:07
>>294
これって名著なの?
俺買ったけど面白くなかったからSICP買って今それ読んでる。
SICP読み終わってからこれ読んだらわかるようになってるかな?
297:デフォルトの名無しさん
08/01/26 00:49:36
別に名著じゃないと思うけど
グレアムのAnsi Common Lisp/On Lispの方がずっといい
けどSchemeは本が少ないから
自分が持ってるのはディヴィグ本の日本語版、SICPの日本語版、Schemeによる記号処理入門
298:デフォルトの名無しさん
08/01/26 00:53:24
本が少ないってのは日本語の本のことね
299:sage
08/01/26 07:53:15
いま、とんでもないことに気がついたんだが ...
LISP は LISP で アトム を定義することができない
そんな、気がするんだが気のせいか?
300:デフォルトの名無しさん
08/01/26 09:12:44
>>299
atom は pure lisp の5関数(CAR、CDR、CONS、ATOM、EQ)に含まれているんだからそらそうでしょ
301:デフォルトの名無しさん
08/01/26 10:29:10
Lisp作るのにyaccは不要だがlexに匹敵する強力なリードマクロがあってもいいはず
302:デフォルトの名無しさん
08/01/26 12:35:10
>>266
>プログラムをCommon Lispで動くかどうかも試してないみたいですし。
本のサポートページにソースがあったのでちょっとだけ試してみた。
URLリンク(book.mycom.co.jp)
8章のコードはGCLならOKだったよ。SBCLだとひっかったのがあったけど。
CLだとfuncallとか1+をquoteしなきゃならないとか気持ち悪いので
Schemeで書き直そうかと思っている。
303:デフォルトの名無しさん
08/01/26 13:07:21
λ計算はβ変換で簡約していくのに対して
Lisp、Schemeは都度実際に計算していくので
λとは違うみたいだね。
Lispでλ式をλ計算どおりに簡約化していくものを作ったら面白いかも。
304:303
08/01/26 13:12:05
ああ、萩谷先生、もうとっくにそういうの作ってるね。
URLリンク(hagi.is.s.u-tokyo.ac.jp)
305:デフォルトの名無しさん
08/01/26 15:50:38
>>303
いかにしてα変換をサボるかが重要なわけだが
((lambda (x) (lambda (y) x)) y) => (lambda (foo) y)
306:デフォルトの名無しさん
08/01/26 16:15:30
やたー!
OpenBSDザウルスでGaucheが動かせるようになったー!
pdaXromやtitchyやPocketWorkstationに浮気する必要がなくなったー!
307:デフォルトの名無しさん
08/01/26 18:05:38
>>303
その辺りは昔、関数型言語の遅延評価の実装で良く議論されました。
古いけど全文公開されている↓の「第二部 グラフ簡約」など。
URLリンク(research.microsoft.com)
308:デフォルトの名無しさん
08/01/26 20:45:52
>>305
>>307
面白くなってきたので今晩、Schemeでλ計算インタープリタを書いてみるよ。
309:デフォルトの名無しさん
08/01/26 22:34:06
;;λ計算インタープリタ
(define (subst old new f)
(cond ((null? f) '())
((equal? (car f) old) (cons new (subst old new (cdr f))))
((atom? (car f)) (cons (car f) (subst old new (cdr f))))
(else (cons (subst old new (car f))(subst old new (cdr f))))))
(define (lambda? f)
(and (list? f) (eq? (car f) 'lambda)))
(define (atom? f)
(and (not (pair? f))))
(define (beta-redix? f)
(and (lambda? (car f))
(not (null? (cdr f)))))
310:デフォルトの名無しさん
08/01/26 22:34:45
(define (beta-conversion l m)
(let ((arg (caadr l))
(body (cddr l)))
(subst arg m body)))
;; (((lambda (x) ...) M)) -> ((lambda (x) ...) M)
(define (deep-lambda? f)
(cond ((lambda? f) #f)
((atom? (car f)) #f)
((and (list? (caar f)) (eq? (caaar f) 'lambda)) #t)
(else #f)))
(define (reduction form)
(cond ((deep-lambda? form) (reduction (car form)))
((not (beta-redix? form)) form)
(else (begin (display form)(newline)
(reduction (beta-conversion (car form) (cadr form)))))))
(define foo '((lambda (x) x) (lambda (a) a)))
(define bar '((lambda (y) y ((lambda (z) x z) (lambda (z) z))) (lambda (a) a)))
311:デフォルトの名無しさん
08/01/26 22:37:43
> (reduction bar)
((lambda (y) y ((lambda (z) x z) (lambda (z) z))) (lambda (a) a))
((lambda (a) a) ((lambda (z) x z) (lambda (z) z)))
((lambda (z) x z) (lambda (z) z))
(x (lambda (z) z))
新納先生のp157をやってみて同じ結果になったつもりなんだけど...
こんなんでいいのだろうか?
β変換しか考えていない。α変換は無視している。
312:デフォルトの名無しさん
08/01/26 22:44:47
一瞬意味判らんかったけど、x yの場合(x y)の意味か。
まあ副作用無視なら単純だよ。
313:デフォルトの名無しさん
08/01/26 23:29:18
λx.(NM)はλx.NM と略記して良いと書いてあったので。
正直、まだよく理解できていない。こういうことをやることがλ計算と
言われるものなのだろうか???
314:デフォルトの名無しさん
08/01/26 23:40:32
> (reduction '((lambda (x) x) y))
((lambda (x) x) y)
(y)
これは(null? (cdr f))とかすればいいとして
> (reduction '(x ((lambda (x) x) y)))
(x ((lambda (x) x) y))
こっちが面倒だな
315:デフォルトの名無しさん
08/01/27 07:27:52
>>314
あ、そっか。なるほど~。
考えてみる。λ計算ってのはなかなか面白いね。
かんばってチャーチ、ロッサーの定理にも挑戦してみたい。
316:デフォルトの名無しさん
08/01/27 08:35:22
;;λ計算インタープリタ ver0.2
(define (subst old new f)
(cond ((null? f) '())
((equal? (car f) old) (cons new (subst old new (cdr f))))
((atom? (car f)) (cons (car f) (subst old new (cdr f))))
(else (cons (subst old new (car f))(subst old new (cdr f))))))
(define (lambda? f)
(and (list? f) (eq? (car f) 'lambda)))
(define (atom? f)
(and (not (pair? f))))
(define (beta-redix? f)
(cond ((atom? f) #f)
((and (atom? (car f)) (null? (cdr f))) #f)
((and (lambda? (car f))(not (null? (cdr f)))) #t)
((lambda? (caadr f)) #t)
(else #f)))
317:デフォルトの名無しさん
08/01/27 08:36:45
(define (left-lambda? f)
(and (lambda? (car f))(not (null? (cdr f)))))
(define (right-lambda? f)
(lambda? (caadr f)))
(define (beta-conversion l m)
(let ((arg (caadr l))
(body (cddr l)))
(subst arg m body)))
(define (deep-lambda? f)
(cond ((lambda? f) #f)
((atom? (car f)) #f)
((and (list? (caar f)) (eq? (caaar f) 'lambda)) #t)
(else #f)))
(define (var? f)
(and (atom? (car f)) (null? (cdr f))))
(define (deep-lambda2? f)
(and (lambda? (car f)) (null? (cdr f))))
318:デフォルトの名無しさん
08/01/27 08:37:34
;; (((lambda (x) ...) M)) -> ((lambda (x) ...) M)
;; (x) -> x
;; ((lambda (a) a)) -> (lambda (a) a)
(define (simpl f)
(cond ((atom? f) f)
((deep-lambda? f) (car f))
((deep-lambda2? f) (car f))
((var? f) (car f))
(else f)))
(define (reduction form)
(cond ((not (beta-redix? form)) form)
((left-lambda? form)
(begin (display form)(newline)
(reduction (simpl (beta-conversion (car form) (cadr form))))))
((right-lambda? form)
(begin (display form)(newline)
(reduction (simpl (beta-conversion (caadr form) (cadr (cadr form)))))))))
(define foo '((lambda (x) x) (lambda (a) a)))
(define bar '((lambda (y) y ((lambda (z) x z) (lambda (z) z))) (lambda (a) a)))
(define baz '(x ((lambda (x) x) y)))
(define boo '((lambda (x) x) y))
319:デフォルトの名無しさん
08/01/27 08:39:33
> (reduction foo)
((lambda (x) x) (lambda (a) a))
(lambda (a) a)
> (reduction bar)
((lambda (y) y ((lambda (z) x z) (lambda (z) z))) (lambda (a) a))
((lambda (a) a) ((lambda (z) x z) (lambda (z) z)))
((lambda (z) x z) (lambda (z) z))
(x (lambda (z) z))
> (reduction baz)
(x ((lambda (x) x) y))
y
> (reduction boo)
((lambda (x) x) y)
y
>
こんどはいいかな?
320:デフォルトの名無しさん
08/01/27 09:02:39
(define uoo '((lambda (x) (lambda (y) x)) y))
> (reduction uoo)
((lambda (x) (lambda (y) x)) y)
(lambda (y) y)
>
これがダメなんだけどα変換がよくわからない。
高橋正子先生の本にもα変換がないみたい。
321:デフォルトの名無しさん
08/01/27 09:42:50
違っていた。修正
(define (beta-redix? f)
(cond ((atom? f) #f)
((and (atom? (car f)) (atom? (cadr f))) #f)
((and (atom? (car f)) (null? (cdr f))) #f)
((and (lambda? (car f))(not (null? (cdr f)))) #t)
((lambda? (caadr f)) #t)
(else #f)))
(define (reduction form)
(cond ((not (beta-redix? form)) form)
((left-lambda? form)
(begin (display form)(newline)
(reduction (simpl (beta-conversion (car form) (cadr form))))))
((right-lambda? form)
(begin (display form)(newline)
(reduction (list (car form)
(simpl (beta-conversion (caadr form) (cadr (cadr form))))))))))
> (reduction baz)
(x ((lambda (x) x) y))
(x y)
322:デフォルトの名無しさん
08/01/27 18:13:47
>>306 激しく乙
つ旦
323:デフォルトの名無しさん
08/01/27 19:17:30
>>322
ども
だけどGC周りがまだ怪しいから手をくわえなきゃいけない
324:デフォルトの名無しさん
08/01/27 21:14:25
URLリンク(tcc.nifty.com)
gauche.night前売りktkr。今年は黒田さん出ないの?
325:デフォルトの名無しさん
08/01/27 23:02:15
>>324
黒黒田でないんじゃつまらんなぁ
326:デフォルトの名無しさん
08/01/27 23:14:26
>>320
λ式をリストで表現してると、名前の衝突回避は難しいような
327:デフォルトの名無しさん
08/01/27 23:35:04
>>326
> uoo2
((lambda (x) (lambda (z) x)) y)
> (reduce uoo2)
((lambda (x) (lambda (z) x)) y)
(lambda (z) y)
>
束縛変数の付け替えをすればうまくいくはずで、そのことを
α変換というのだと思う。で、このα変換をどのようにアルゴリズム
として表現できるのかと考えている。
新納先生のp156のβ変換の説明の最初にあるアンダーラインの部分が
α変換のことだと思う。
コンパイラ設計者には必須の知識らしいんだけどさっぱりわからない。
328:デフォルトの名無しさん
08/01/27 23:38:22
チャーチ符号化はこんなことなのだと思う。
> two
((lambda (x) (lambda (s) (s (s x)))) 0)
> (reduce two)
((lambda (x) (lambda (s) (s (s x)))) 0)
(lambda (s) (s (s 0)))
> ((lambda (s) (s (s 0))) 1+)
2
>
SICPの1章にもあったような気もするけど忘却の彼方。
329:デフォルトの名無しさん
08/01/27 23:47:46
openmclがClozure CLに改名したね。
330:326
08/01/27 23:58:13
>>327
ああそうか、ちょっと勘違いしてたみたいだ。
(lambda ...) に代入するときに名前を変えてやればいいんだから、
そんなに難しくはないね。
331:デフォルトの名無しさん
08/01/28 00:05:11
>>327
住井先生の速攻MinCamlコンパイラ概説のAlpha.mlが読めればそれを参考にするといいかも.
URLリンク(min-caml.sourceforge.net)
MinCamlではλ式でなくlet recのところでローカル関数を定義するけどね.
構文木を上から調べていって,変数が導入されていたら
グローバルなカウンタか何かを使ってとにかく一意な名前に変えてしまう( x → x1, y → y2 etc. )
そしてハッシュでその対応を覚えておく.
ネストした変数束縛で同じ "x" が再び現れたら,
そこから下の部分木では対応は x → x1 でなく x → x3 (例えば)であるとハッシュを更新.
例.構文木のうち見終わった部分を [] で書くと...
(lambda (x) (lambda (y) (lambda (x) (list x y x))))
→ [lambda [x1] (lambda (y) (lambda (x) (list x y x)))] with {x → x1}
→ [lambda [x1] [lambda [y2] (lambda (x) (list x y x))]] with {x → x1, y → y2}
→ [lambda [x1] [lambda [y2] [lambda [x3] (list x y x)]]] with {x → x3, y → y2}
→ [lambda [x1] [lambda [y2] [lambda [x3] [list x3 y2 x3]]]] with {x → x3, y → y2}
332:デフォルトの名無しさん
08/01/28 01:35:10
C#の匿名メソッドはクロージャーじゃないっていうけど、何で?
クロージャーの補足する環境にオブジェクトの値ではなく参照を含めるだけじゃダメなの?
scheme的にはどう?
333:327
08/01/28 08:30:39
>>331
ありがとう。
やってみるよ。
334:デフォルトの名無しさん
08/01/28 10:26:25
>>332
URLリンク(blogs.msdn.com)
335:306=323
08/01/28 17:16:03
GaucheをOpenBSDザウルスでビルドできるようになったんだけど
45%程度の確率で*load-path*が破損している
55%: ("../test" "../lib" "../libsrc" "../src" ...)
45%: ("\f" "../lib" "../libsrc" "../src" ...)
みたいな感じ
-Iで与えられたディレクトリ名のみが破壊されてる
破壊されるパターンはランダムではなく、
いつも決まった文字列にすり替わってる
GC_DONT_GC=Yesすると0%になるからGC周りの問題なんだろうけど
どこが悪いのか見当もつかない
せめて同じ引数で起動したときには同じ状況になってくれればいいのに
336:デフォルトの名無しさん
08/01/28 23:03:08
うへえ、追いにくそうなバグだね
337:デフォルトの名無しさん
08/01/28 23:36:35
起動してから20分ぐらいして温まったら安定したりしてなw
そのザウルス大丈夫なんだろうな?
338:306
08/01/28 23:44:17
これまでにわかったのは
・最初のプロンプトが出る前にGCが発動した場合にのみ破壊が起こってること
・プロンプトが出た後のGCによって破壊されることは(今のところ)ないこと
・同じカレントディレクトリに同じ環境変数に同じコマンドライン引数でgoshを起動しても
最初のプロンプトが出る前にGCが発動するのが1000回試行中440回程度あること
・-I引数をいくつも与えると"srfi-6"とか"srfi-2"とか意味のある文字列にすりかわったりする場合があること
・同じカレントディレクトリに同じ環境変数に同じコマンドライン引数で起動した場合
すりかわった後の文字列はいつも同じであること
これらの材料でアタリをつけられる人いませんか?
339:306
08/01/28 23:58:06
温まったら安定するようになるって可能性より
稼働時間長すぎて不安定になってるって可能性のほうが高いかもw
セルフコンパイル&セルフデバッグ&SSH鯖だから
340:306
08/01/29 00:05:48
あ、そういえばプログラムが暴走したり長時間走ってるプロセスがあると
プログラムを起動しようとしてもBad Addressで起動しなかったりするようになる
何度も何度もチャレンジすれば起動するけど
i386-OpenBSDならそういうことないんだけど
でもそういうハード的な原因ならもっとランダムに破壊されそうなものだけど
破壊される場合は必ず同じパターンに破壊されるからソフト側の問題だと思う
Boehm-GCの機種依存部分であるスタックの底とstatic領域の始点を得る関数は
破壊パターン正常パターンともに同じ値を返してます
Gauche本体に当てたパッチはDOUBLE_ARMENDIANを未定義にするってのだけだから
やはりBoehm-GCに当てたパッチのバグ臭い
341:デフォルトの名無しさん
08/01/29 01:11:53
>機種依存部分
CPUのレジスタも?・・・考えるだけでも恐ろしい
342:306
08/01/29 01:30:37
static領域の終点も同じ値を返すから
どうもレジスタの指す領域のマーク漏れ臭い
でもi386-OpenBSDでは問題ないし
Linuxザウルスではうまくいってる(らしい)から
もうBoehm-GC側では怪しいところはないんだけどなぁ
343:デフォルトの名無しさん
08/01/29 06:46:25
α変換とβ変換を考え直した。
;;λ計算インタープリタ ver0.3
(define (subst old new f)
(cond ((null? f) '())
((equal? (car f) old) (cons new (subst old new (cdr f))))
((atom? (car f)) (cons (car f) (subst old new (cdr f))))
(else (cons (subst old new (car f))(subst old new (cdr f))))))
(define (atom? f)
(and (not (pair? f))))
;;λ式の判定 定義2.1.1(計算論)
(define (lambda-term? f)
(cond ((symbol? f) #t) ;x0,x1...
((number? f) #t) ;1,2,3..数もλ式ということにする。
((null? (cdr f)) #f) ;(M)
((and (eq? (car f) 'lambda)(symbol? (caadr f))(lambda-term? (caddr f))) #t);λx.M
((and (lambda-term? (car f))(lambda-term? (cadr f)))) ;(M N)
(else #f)))
344:デフォルトの名無しさん
08/01/29 06:47:41
;;α変換 λ式の定義にしたがってパース。
(define (alfa-conversion f)
(genvar 'reset)
(reset-var)
(alfa-conversion1 f))
(define (alfa-conversion1 f)
(cond ((and (symbol? f)(bound? f)) (bound? f))
((and (symbol? f)(not(bound? f)) f))
((number? f) f)
((null? (cdr f)) (alfa-conversion1 (car f)))
((and (eq? (car f) 'lambda)(symbol? (caadr f)))
(let ((new (genvar 'gen)) (l '()))
(bound (caadr f) new)
(set! l (list 'lambda (list new) (alfa-conversion1 (caddr f))))
(reset-var)
l))
(else (list (alfa-conversion1 (car f))(alfa-conversion1 (cadr f))))))
;;変数リスト
;;((x . x1)(y . x2) ...)
(define var-assoc '())
(define (bound? v)
(let ((ans (assq v var-assoc)))
(if ans
(cdr ans)
#f)))
345:デフォルトの名無しさん
08/01/29 06:49:06
(define (bound old new)
(set! var-assoc (cons (cons old new) var-assoc)))
(define (reset-var)
(set! var-assoc '()))
;; 変数を生成する
(define genvar
(let ((x -1))
(lambda (msg)
(cond ((eq? msg 'gen)
(begin (set! x (+ x 1))
(string->symbol (string-append "x" (number->string x)))))
((eq? msg 'reset)(set! x -1))))))
;;β基の判定 (λx.M)N 計算論p66
(define (beta-redex? f)
(cond ((atom? f) #f)
((atom? (car f)) #f)
((and (eq? (caar f) 'lambda)
(symbol? (caadar f))
(lambda-term? (caddar f))
(lambda-term? (cadr f))) #t)
(else #f)))
346:デフォルトの名無しさん
08/01/29 06:49:59
;;β正規形 β-normal-form
(define (beta-normal-form? f)
(cond ((and (lambda-term? f)(symbol? f)) #t) ; x0
((and (lambda-term? f)(beta-redex? (cadr f))) #f) ;(x λx.M)
((and (lambda-term? f)(not (beta-redex? f))) #t)
(else #f)))
;;β変換
(define (beta-reduce l m)
(let ((arg (caadr l))
(body (cddr l)))
(subst arg m body)))
;; ((N M)) -> (N M)
;; (x0) -> x0
;; (N) -> N
(define (simpl f)
(cond ((lambda-term? f) f)
((and (lambda-term? (car f))(null? (cdr f))) (car f))
((and (lambda-term? (caar f))(lambda-term? (cadar f))) (car f))
(else f)))
(define (reduce form)
(reduce1 (alfa-conversion form)))
347:デフォルトの名無しさん
08/01/29 06:51:56
(define (reduce1 form)
(cond ((beta-normal-form? form) form)
((beta-redex? form)
(begin (display form)(newline)
(reduce1 (simpl (beta-reduce (car form) (cadr form))))))
((beta-redex? (cadr form))
(begin (display form)(newline)
(reduce1 (list (car form)
(simpl (beta-reduce (car (cadr form)) (cadr (cadr form))))))))))
> uoo
((lambda (x) (lambda (y) x)) y)
> (reduce uoo)
((lambda (x0) (lambda (x1) x0)) y)
(lambda (x1) y)
>
長々とスマンです。
348:デフォルトの名無しさん
08/01/29 07:10:53
GaucheのGCは保守GCだっけ?
しかもARM?バグバグの予感
349:デフォルトの名無しさん
08/01/29 07:15:28
λの本体はやっぱりカッコでくくらないといけなかった。
> bar
((lambda (y) (y ((lambda (z) (x z)) (lambda (z) z))))
(lambda (a) a))
> (reduce bar)
((lambda (x0) (x0 ((lambda (x1) (x x1)) (lambda (x2) x2)))) (lambda (x3) x3))
((lambda (x3) x3) ((lambda (x1) (x x1)) (lambda (x2) x2)))
((lambda (x1) (x x1)) (lambda (x2) x2))
(x (lambda (x2) x2))
>