[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 05/09 21:23 / Filesize : 75 KB / Number-of Response : 279
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Lisp Scheme Part23



1 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 00:09:48 ]
※ ここはCommon Lisp、SchemeをはじめとするLisp族全般のスレです ※

□過去スレ□
Part22: ttp://pc11.2ch.net/test/read.cgi/tech/1211381920/
Part21: ttp://pc11.2ch.net/test/read.html/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

159 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 02:12:45 ]
>>151
マクロ機能は自分で好みのを書けってことだったんじゃないかな?
当時のマクロの実装は簡単だったしね。



160 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 02:42:42 ]
>>149
私立だって簡単に聴講生になれるぞ。
金がかかるだけで。

161 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 02:47:46 ]
>>159
最初の頃はFSUBR + EVALで一々手で書いた。
パターンが出来上がったのでdefmacroになった。

>>156
> 自習だとつまらないことでつまづいて長い時間考えることがあるからです。

本当はそれが大切なんだけどね。
より深く理解するし、それが出来る人が継続もできる。
壁に負ける人はいつも負け続ける。


162 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 02:56:09 ]
それが大切だとしても若いうちだけだろ。
年取ってるなら金払ってでも学習速度を上げたいって言うのはわかる。

163 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 02:59:04 ]
生涯学習だな。カルチャー教室でやらないかな?w

164 名前:lischemep ◆/uyHCgG7qA mailto:sage [2008/08/12(火) 06:13:10 ]
>>157
家庭教師。つまるところそうなのかもしれません。
Lisp/Schemeにとっつきにくさがあると思ってて
同じ状況の人がいるだろうと思ってたのですがあまりいないみたいですし。。。

状況としてはThe Little Schemerの半ばで頓挫している状況です。
他にもプログラミングGaucheやANSI Common Lispなどをつまみ食いしてますが
途中で分からなくなってます。

色々当たっているうちに少しずつ分かったりしますが
時間がかかりすぎている気がしています。
このままだと数年かけて一冊片付くペースになってしまいそうです。


>>162
三十代になるとさすがに焦ります。

165 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 08:01:59 ]
> 三十代になるとさすがに焦ります。
俺は164がなんでLisp/Schemeをやってみようと思ったのかが気になるな。
知的興味が理由なら年齢で焦ることはないだろうし。
近い将来に仕事で使う必要があるのなら焦る気持ちもわかる。
学習する動機によっておすすめの方法も違ってくると思うんだが。どう?

166 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 09:03:44 ]
書いてあるじゃん
挫折しそうだから
くじけそうだから
もう後がなさそうだから

167 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 09:45:28 ]
俺なんて、40近くになってScheme始めたぞ。
独学でSICPをしこしこ解いてるよ。

同時に数学の勉強も始めたんだが、こっちがきつい。
数学基礎論のやさしい教科書はないかな。



168 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 10:56:25 ]
目的がいまいちはっきりしない質問者はやがて身の上話を始める法則

>>167
> 同時に数学の勉強も始めたんだが、こっちがきつい。
> 数学基礎論のやさしい教科書はないかな。

数学基礎論の質問スレッド その4
science6.2ch.net/test/read.cgi/math/1207899938/

おおかた数理論理学か集合論の教科書を薦められると思うが
計算機科学との関連で何かもくろみがあるならこっちへ
science6.2ch.net/informatics/

169 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 12:54:29 ]
「数学」が何を指してるか知らんが、
基礎論は数学を勉強する支えにはならないぞ普通は。

集合論とか論理とかを学ぶなら基礎論には手を出していない
普通の教科書のほうが良い。

170 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 13:28:48 ]
>>168
ありがとうございます。覗いてみます。

>>169
そうなんですか?
集合論とか論理学から、計算機科学方面へ進めていきたいと思っていたのですが。
私の「基礎論」という言葉の使い方がおかしいのでしょうか?
集合論や論理学そのものを学んだほうが良いということでしょうか?

171 名前:デフォルトの名無しさん [2008/08/12(火) 18:36:29 ]
>>146
仕様があればまともな言語なのぉ〜?


172 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 18:40:24 ]
「まともな言語」の集合を定義してください

173 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 19:28:14 ]
>>170
今、数学で「基礎論」といったら、逆数学とかあのへんのことを指すんじゃないかな。
少なくとも専門分野を「基礎論」と自己規定してる数学者は、だいたいそのあたりの
分野を研究してることが多い。(Harvey Friedman, Stephen Simpson, 田中一之氏, etc)
「基礎論」という分野が勃興してきた19世紀末と現在とでは、言葉のニュアンス
がかなり違ってきているので、注意が必要かと。

167氏はあるいはもっとルーズに、「基礎論」という言葉を「数理論理学」とほぼ同義で
使ってるのかもしれないが。

まあいずれにしろ、数理論理学は(少なくとも初歩の段階では)メインストリームの数学とは
直接関係しないことが多いね。幾何的モデル理論みたいに、数論への応用があったりする
分野もあることはあるけど、そういうのは非常に専門的な話題になってしまう。
(169氏が言ってる「数学を勉強する支えにはならない」というのはおそらくそういうニュアンスなのだろう。)

でも理論計算機科学に興味があるのなら、数理論理学は必須だから、(167氏言うところの)
「基礎論のやさしい教科書」を勉強するのは意味のあることだと思うよ。

とりあえずはこのあたりをご参考に。
ttp://www.kurims.kyoto-u.ac.jp/~hassei/reading_list.html#LOGIC

174 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 20:05:34 ]
計算機工学者のための計算機数学のとっかかりということなら、
島内さんの「数学の基礎」はどうかと思ったが、
www.amazon.co.jp/数学の基礎-島内-剛一/dp/4535601062
絶版で中古市場では高い!ヤフオクでも元より値が上がってる!

175 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 20:22:59 ]
竹内外史とかのは基礎論だよな?

と板違いか。

176 名前:lischemep ◆/uyHCgG7qA mailto:sage [2008/08/13(水) 06:23:48 ]
>>165
はじめのきっかけは、「普通のやつらの上を行け」を学生時代に読んでです。

知的興味もありますが、将来的には仕事で使いたいと思っています。
また、なるべくLisp/Schemeを広めていきたいと思っています。
それで初学者向けの勉強会が出来ないかと思いました。

目標としては、AllegroServeを使えるようになること、
On Lispを理解できるようになることです。

177 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 07:40:49 ]
>>176
まだ、shemeやcommon lispに馴れていないならば、SICPよりもう少し簡単なもの
からお勧めするよ。
schemerなら、gauche本でもいいし、common lisperならAnsi Common Lispや岩波
の本でもいいし。



178 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 11:16:10 ]
>>176
ポールグレアムって結局SchemeにもCLにも否定的じゃないか?

179 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 14:30:39 ]
>>178
どちらかといえばSchemeにもCLにも肯定的だと思うよ。
(Lisp族以外の言語に比べれば)

180 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 16:20:52 ]
PG
javaには否定的というのははっきりしてるし、C系に苛立ちを持ってるような記述も
みかけたことはあるかな。

181 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 16:46:20 ]
CとPerlは人気の言語として色々条件を満たしているみたいな話があったような

182 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 18:55:38 ]
40年も前から存在するのに
lispが全く存在感無い事について
想像力を働かせてみた方がいいと思うね

183 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 20:29:28 ]
>>182
どれだけの世界を見て生きてきたか知らんが、
あなたのちっぽけな経験で感じた存在感なんて
なんだというのだ
ふしあなか?


184 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 20:42:17 ]
>>183
頑張ってそれか?
「viaweb以外のインストールベースの例を教えてください」
って聞かれたらどうするの?
はいやりなおし!

185 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 20:44:57 ]
「実用性なんて飾りです。偉い人にはそれがわからんのですよ。」
くらい言わないと。

186 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 21:16:40 ]
>「viaweb以外のインストールベースの例を教えてください」

なんか薄っぺらいなぁ。

187 名前:デフォルトの名無しさん [2008/08/13(水) 21:37:39 ]
>>170
皆言ってるように「数学基礎論」そのものに首を突っ込む必要はない。
集合というのはただのモノで、ただのモノについての議論を深めていくと
濃度がどうとか数学基礎論の方へ行く。

そっちではなくて数学の基礎と言うか数学村の言葉使いに慣れておく必要がある。
つまり集合と言うただのモノに必要な性格付けをして数学的な実質のある体系を
作っていく手順を自分なりに一度は体験しておく必要がある。

入り易いのは数の構成で、島内氏のとか岩波新書に「数の体系」とかいろいろある。
そんなことは分かってるというのであれば不要だが、単に実数も複素数も知ってるというのではだめ。

次にやっておくべきは代数かな。計算機科学との相性も良いし、暗号等での応用もあって本もたくさんある。

あとは必要と興味に応じてやっていけば良い。ひとつ注目したいのは圏(カテゴリー)論。
ひと昔前はGAN(GENERAL ABSTRACT NONSENSE)とか揶揄されたが様変わりで、
Haskellで圏論と言う言葉を知る人も増えたらしい。




188 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 22:43:56 ]
昔の本だと「数学基礎論」となっていても
真偽関数から始めて命題論理・モデル理論・述語論理・帰納的関数・・・と続き
最後にちょこっと公理的集合論が出てくる、というような感じで
>>170のやりたそうなことに内容的にはちょうどよかったんじゃないかと思うが
今はもっと効率的にやる方法もあるだろう

189 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 00:16:28 ]
>> 173, 187, 188
ご教示、ありがとうございます。

そもそもの動機なのですが、ただいま「論理と計算のしくみ」を読んでいまして、
ちょっと展開が速すぎて着いていけないので、もうすこし詳しく、さらに言えば
演習もあるような書籍は無いかと思ったしだいです。
証明の仕方に慣れていないせいか、結論はともかく過程に納得ができなくて。

とりあえず、「論理学をつくる」を入手しましたので、これをみっちりやってみます。

圏論も視野には入っています。ちょっと遠そうですが。

一番初めの目的はプログラミングや設計に役立てるためだったのですが、
いつのまにか、数学を学ぶこと自体が楽しくなってきてしまいました。
脱線して、計算機科学と関係ない方向に行ってしまいそうです。

190 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 00:18:15 ]
>>184
はいさようなら!

191 名前:176 mailto:sage [2008/08/14(木) 08:39:29 ]
177さん

助言ありがとうございます。

やっぱりLispかSchemeどっちを学ぶか決めた方がいいのでしょうか。今は両方手をつけてます。

それと最近翻訳された実践Common Lispは初学者向けですか?

192 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 09:00:16 ]
>>191
そこは自分で考える部分だよ。

言語の取得って基本的に同時に複数をやるのはあまりよいとは思えないですね。
ゴールがなにか?を考えたら使用する言語は決まってくると思うけど。
LLな活動ならgauche で充分だけど、重い計算をさせるならcommon lispのほうが
当然向いてるし。

193 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 10:15:16 ]
>>192
同時にやるのが〜といったのは
(defun foo (arg1 arg2) ....)
(define (foo arg1 arg2) ....)
と微妙な違いの1例だけど、この違いがなれないうちは混乱に結びつくからだよ。
(defun foo (arg1 arg2)
....
(cond
[(= a b) ...]
....))

みたいになっちゃいけないし。

194 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 10:18:31 ]
>>193
それはcommon schemeだ。

195 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 17:48:19 ]
>>191
『プログラミングGauche』で「途中で分からなくなって」るんだったら、
『実践CL』も同じ結果になる可能性が高いんじゃないかと。

とりあえず「AllegroServeを使えるようになる」という目標があるのなら、
CL一本に絞って、もっと懇切丁寧な初学者向け教科書で勉強してみるのが
一番じゃないでしょうか。

Peter Norvigもたしか「まったくの初心者にはこれが一番いい」と言ってたと
思いますが、TouretzkyのGentle Introductionが非常に丁寧でいいと思います。
こちらから全文が無料でダウンロードできます。

ttp://www.cs.cmu.edu/~dst/LispBook/index.html

196 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 20:27:19 ]
「リスト遊び」とかどうだろう。Emacsが動けばすぐ試せるし。

197 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 21:32:19 ]
「プログラミングGauche」は全部理解する必要はないだろう。
特に第3部は必要な箇所だけ読めば良い。



198 名前:lischemep ◆/uyHCgG7qA mailto:sage [2008/08/14(木) 23:53:22 ]
皆様、色々と助言ありがとうございます。

>>195さん、
よさそうですね。後で印刷して通勤の合間に読んでみます。

>>196
Emacs Lispの本も持ってます。そちらにも手を付けてみます。

>>197
それを聞いて少し安心しました。

199 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 00:10:04 ]
AllegroServeを使えるようになるにしろ、On Lispを読めるようになるにしろ、
実践Common Lispは良いテキストだと思うけどなあ。

漏れは、リスト遊びや、Elispの勉強は、上二つの目的には直接関係してこないと思う。

200 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 07:36:30 ]
>>199
禿同。実践本がマスターできたら、あとは自分で調べながら何でもやれるよ。
マクロもCLOSも書いてある本は他にないと思う。実践本のFOO言語の下りは
本当に素晴しい。

ちなみにAllegroServeは使うだけなら全然難しくないよ。
S式でややこしいListの構築の練習に良いかもね。
リスト遊びは名著だけど、泥臭くなさすぎる。

201 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 21:17:10 ]
教えてください.R5RSに記述されている手続き/シンタックスはすべて
syntax, library syntax, procedure, library procedure, optional procedureのいずれかに
分類されていますが,define, define-syntax, syntax-rulesに関しては上の分類別の記述がありません.
どのように考えれば良いでしょうか.すべて定義に必要なものですから基本的なものだとは思うのですが
単純にsyntaxの部類に属するとしてよいのでしょうか.

202 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 22:01:12 ]
define、define-syntaxは式ではないのでsyntaxではない
syntax-rulesは式ではないのでsyntaxではない

たぶん


203 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 22:15:19 ]
CLで言う所の特別式は値のある式だけど
R5RSではたとえば
(define x (define y 100))
などは許されない

204 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 22:16:49 ]
値のない式もあるから203の例は不適当だったか

205 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 22:59:38 ]
>>201
define, define-syntax, syntax-rulesは確かに書いてないねえ。
でも、こいつらはどう考えても手続きじゃないから分類するならsyntaxなんじゃないの?


206 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 23:14:59 ]
CLみたいに特別式、関数、マクロに単純に分類できないからねぇ
beginの扱いも微妙だし

207 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 16:12:21 ]
svnから引っ張ってきた最新版のgaucheをVCでコンパイルすると
実行時にしょっぱなのScm_Initでこけます。

どうもvminsn.cの SCM_VM_LOCAL_ENV_CALL ラベルに来たとき
vm->val0に値が設定されていないことが原因っぽいのですが、
これの解決策分かる方いませんか?

スレチなら、適切な場所に誘導してもらえると嬉しいです。



208 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 16:17:07 ]
>>207
> スレチなら、適切な場所に誘導してもらえると嬉しいです。
www.lingr.com/room/gauche

209 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 16:21:22 ]
>>201
自分はsyntaxだと理解してきました。

ちなみにR6RSではsyntaxと明記です。

210 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 16:32:12 ]
>>208
ありがとうございます。

211 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 10:08:30 ]
natu.txt-nifty.com/natsutan/2008/08/lisp_186c.html

センスのないネタやね。この手の奴にlispを語ってほしくないな。sicpを
やってた奴みたいだが。

212 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 11:21:48 ]
どうでもいいものを、ここに張る奴もどうかしてる。

213 名前:201 mailto:sage [2008/08/23(土) 02:28:49 ]
>>みなさま
いろいろお教えいただきましてありがとうございます
>>209 さんのご意見に従い
割り切ってsyntaxに入れてしまったのが簡単で良いかなと思っています
しかしこれらをあえてsyntaxから外してあるということは
R5RSはそれだけ厳密に定義されているということなんでしょうか

214 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 14:07:51 ]
R5RSは結構いい加減w
それ系のMLでも解釈について議論になってる。

もちろん仕様がないような言語とは比較になりませんが。

どういう言語でも↓こういうことがあるもんなんです。
www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html
そういうレベルの意味において「いい加減」

215 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 14:32:15 ]
静的型と仕様は頭の中にあればいいよ

216 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 13:16:35 ]
お前は頭の中で済むほど頭がいいのか?

217 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 13:41:23 ]
お前は頭の中で済むと思い込むほど頭がわるい人は多い。




218 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 14:11:09 ]
worse is betterを思い出した
頭のいい奴は複雑なものを作るから困る

219 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 14:17:34 ]
日本語は難しくてかなわん
S式で説明してくれ

220 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 16:58:12 ]
(define (難しい? 言語) (eq? 言語 '日本語))
(if (難しい? '日本語) 'S式でおk)

221 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 18:06:39 ]
>>220
コラコラw


222 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 19:41:38 ]
>>220
#<undef>

223 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 21:16:28 ]
ところでSchemeの仕様にむやみと未定義が多いのは何でなの?
なにかに決めりゃいいじゃん、nil でもいいからさぁ。
とりあえず決めた方が実用的になると思うんだけど。

224 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 21:24:42 ]
>>223
決めちゃったらもう変えれないだろ。
議論が尽くされてないところは決めるべきじゃないし、
実用のために不格好になるのは CommonLisp だけで十分。

225 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 21:53:41 ]
common lispが不恰好とな?

226 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 22:26:38 ]
少し認める

227 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 22:44:55 ]
>>223
決めちゃうことが(例えば性能的な)制約になる実装があり得るから



228 名前:デフォルトの名無しさん mailto:sage夜釣り [2008/08/25(月) 00:15:13 ]
rubyとか酷いよね

229 名前:デフォルトの名無しさん [2008/08/25(月) 00:26:43 ]
gauche上の話なのですが、

(definc-syntax member
 (syntax-rules () ((_ name) (name :init-value 0))))

(define-class <test> ()
 (member X))

こうすると、どうも(member X)の展開が上手くいかないようなのです。
これを上手く展開させる方法はありますか?

230 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 00:29:57 ]
>>229
本質的にマクロをわかってない。
あくまでもそういう書き方で展開させたいなら結構めんどいことになるよ。

231 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 00:31:15 ]
評価される場所でないと、マクロは展開されない。
define-class ごと再定義するのが良いだろう。

232 名前:デフォルトの名無しさん [2008/08/25(月) 00:46:58 ]
>>230-231
ありがとうございます。
他のやり方を考えてみます。

233 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 13:14:13 ]
writeとかdisplayが真値を返さない可能性があるので
and-let*とかで処理をつなぐ時にいちいち
(begin (write obj) #t)とか書くのは不恰好な気がする。
せめて#<undef>は#fにはなりえない、くらいの制約は欲しい

(とはいえ、未規定の値を返す手続きが#fを(返す|返しうる)処理系は見たことないけど)

234 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 20:56:28 ]
* が前置されていたら次の式は #t を返したものとして扱う、てな
自分用and-letを定義したらどうよ。

235 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 21:23:18 ]
意味的に and じゃないとこで andなんちゃら を使っているのだから仕方ない

236 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 22:07:51 ]
letをネストしたくないのと、いちいち継続を捕捉して脱出したくないだけだろ
戻り値が未定義だというのは問題の本質ではないな

237 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 22:13:41 ]
朝起きたらLISPになっていますように



238 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 22:22:37 ]
つまり括弧を書きたくないだけだね。
フロントエンドでも作れば?

239 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 22:43:16 ]
HaskellのMaybeモナドっぽく使いたいわけですよ
いろいろマクロを書いて試してます

>>238
括弧を書きたくないのではなくて
beginで値を捨てるのが好きじゃないんです

未規定値は#fかもしれないし真値かもしれないというのも気持ちが悪いです
もしかしたら(eq? (write obj1) (write obj2)) -> #fかもしれませんし

240 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:00:06 ]
個人的には、未規定値は使ったとたんにエラーになる処理系が好ましいな

241 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:34:49 ]
0個の多値を返せばいいじゃない

242 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:54:07 ]
and-let*の中で返り値が未規定な手続きを使ったり、
未規定値を比較する、といった発想が理解できない

243 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:57:40 ]
他コンピュータとの通信プログラムなどで
画面出力するというのが主ですね
クライアントプログラムなどでREPLの介入が出来ない場合
デバッグのための出力を埋め込んだりもします

244 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:59:29 ]
未規定値の比較は実際には行いませんよ
ただ真理値も同一性も規定されていないから
どうなるかはわからないといいたかっただけです

245 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 00:46:26 ]
なぬ? (begin (write "hoge") #t) が恰好悪いですと?
そんな時こそマクロ〜

246 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 08:15:32 ]
>>244
プログラミング向いてないのでは?

247 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 19:11:39 ]
(define (tree-count elem tree)
(let f ((rest tree) (count 0))
(cond
((null? rest) count)
((list? (car rest)) (f (append (car rest) (cdr rest)) count))
(else (if (eq? elem (car rest))
(f (cdr rest) (+ 1 count))
(f (cdr rest) count))))))
(= 6 (tree-count '<> '(A B C <> (A <> (X <>)) <> (<> <>))) ; => #t
こういうのでも末尾再帰になってるんでしょうか?



248 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 20:17:38 ]
fの呼出しは末尾呼出しになってますね

249 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 09:03:03 ]
>>239
ほんとにMaybeモナドみたいにしたいなら、そのように書くしか無いと思うよ
(有効な値は全部Justでくるむとか、逆に「有効な返り値と決してeq?にならない
値」を失敗を表すのに使うとか)。and-let*で#fを特別扱いしてるのは
「大抵の場合うまくいく」っていう一種の妥協で、>>239のアプリは
その「大抵の場合」から外れているってことだと思う。



250 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 23:00:41 ]
絶版になったと思ってたディヴィグ翻訳本
いつの間にかまた売られるようになってますね
3版ではなさそうですが

251 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 19:44:54 ]
little schemerの継続の所が凄くわかり辛い(関数名からして意味不)
今の段階ではこういうのもあるって知っておく程度で詳細は他の本でカバーしろって事かな?

252 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 21:00:46 ]
頑張れ、ここで派を食いしばれってこと。
ドリルみたいなもんだから、逃避したら身には付かない。

253 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 21:07:49 ]
何の発見もない精神論だな

254 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 21:15:31 ]
結局shiroさんの記事とwikipediaとprogramming language schemeを参考にしましたけどね

255 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 21:15:31 ]
ドリルでルンルンクルルンルン

256 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 15:02:19 ]
>>251
具体的にどのページのどれが分からないか書かないとまともなレスは来ないよ常考。

257 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 23:09:46 ]
継続渡しのネタはP.137-147ですね
あとP.160ー173のYコンビネータのネタもややこしいですね
初見では10章よりも難しく思えましたまる



258 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 15:46:59 ]
P.137の multirember&co の定義で2つコレクター出てくる。
ひとつは

(lambda (newlat seen)
(col newlat
(cons (car lat) seen)))

もうひとつは

(lambda (newlat seen)
(col (cons (car lat) newlat)
seen))

実は2つとも無名関数で再帰をしている。このコレクターが再帰のたびに別な関数になっていることをちゃんと理解できてるかな?
これが分かるならP.140までは理解できているはず。つまりTenth Commandmentはコレクターを作れってことだよね。実行してみるとこうなる。

codepad.org/efWZQKk8

8章のテーマは確かに継続渡しなんだけど、無名関数で再帰することを上手にやるのがコレクターってこと。
9章のネタではさらに再帰のさせ方を工夫してやるとYコンビネータを作れるというお話。

P.137からP.140が理解できればコレクターとYコンビネータを両方とも理解できます。頑張れ。

259 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 16:08:06 ]
Yコンビネータは memoization に役立つんだけど、それとコレクターは瓜二つで8章・9章のもとネタになっています。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<75KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef