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

Lisp Scheme Part23

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん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
0153デフォルトの名無しさん2008/08/12(火) 01:12:19
>>149
どうしてもね。その傾向はあるかもね。人工知能の分野もlispよりC++のほうが勢いがあったり
するらしいから、教える人が少なくなるんだろうね。筑波、東工ふくめて旧帝大あたりだったら
一つくらい授業がありそうだけど。それ以外の地方は確かに期待できないかもしれないね。

プログラムの筋はschemeをやる方が断然よくなるんだけどな。これは抽象化がうまくなるから
だろうと思う。高階関数を扱える言語をしっかりやってるかやってないかでセンスはずいぶん変
わるね。
0154デフォルトの名無しさん2008/08/12(火) 01:12:58
>>152
んなこたあないw
0155デフォルトの名無しさん2008/08/12(火) 01:33:56
Lispのアドヴァンテージはいくつか
考えられますが、一番はS式のもつ
プログラムとデータの同一性だと
思います。強力はマクロもその
特性のひとつでは?
0156lischemep ◆/uyHCgG7qA 2008/08/12(火) 01:37:13
>>137
いいリンク紹介ありがとうございます。
やっぱり安く上げる方法考えた方がいいんですかね。
私自身はお金は無頓着なので。場所ももう少し探してみます。
課題本はあったほうがいいんでしょうか。
「この本やりたい」とかありましたら教えてください。


>>138
>>139
自習だとつまらないことでつまづいて長い時間考えることがあるからです。
ネット上で聞くということも出来ますが、
その場合状況説明のやりとりに時間がかかります。
私はもう結構な年なので、お金を払ってでも学習速度を上げたいと思ってます。
0157デフォルトの名無しさん2008/08/12(火) 01:51:10
(意地悪い言い方で申し訳ないけど)自分の家庭教師が欲しい、ってことなのかな?
もしそうなら「自分と同じレベル募集」とか、はっきり言っちゃったほうが良いかも。w

俺も先生は大学生とか限らないほうが良いと思う。
0158デフォルトの名無しさん2008/08/12(火) 01:55:18
> その場合状況説明のやりとりに時間がかかります。

これを要領よくやる訓練も必要かと
0159デフォルトの名無しさん2008/08/12(火) 02:12:45
>>151
マクロ機能は自分で好みのを書けってことだったんじゃないかな?
当時のマクロの実装は簡単だったしね。

0160デフォルトの名無しさん2008/08/12(火) 02:42:42
>>149
私立だって簡単に聴講生になれるぞ。
金がかかるだけで。
0161デフォルトの名無しさん2008/08/12(火) 02:47:46
>>159
最初の頃はFSUBR + EVALで一々手で書いた。
パターンが出来上がったのでdefmacroになった。

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

本当はそれが大切なんだけどね。
より深く理解するし、それが出来る人が継続もできる。
壁に負ける人はいつも負け続ける。
0162デフォルトの名無しさん2008/08/12(火) 02:56:09
それが大切だとしても若いうちだけだろ。
年取ってるなら金払ってでも学習速度を上げたいって言うのはわかる。
0163デフォルトの名無しさん2008/08/12(火) 02:59:04
生涯学習だな。カルチャー教室でやらないかな?w
0164lischemep ◆/uyHCgG7qA 2008/08/12(火) 06:13:10
>>157
家庭教師。つまるところそうなのかもしれません。
Lisp/Schemeにとっつきにくさがあると思ってて
同じ状況の人がいるだろうと思ってたのですがあまりいないみたいですし。。。

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

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


>>162
三十代になるとさすがに焦ります。
0165デフォルトの名無しさん2008/08/12(火) 08:01:59
> 三十代になるとさすがに焦ります。
俺は164がなんでLisp/Schemeをやってみようと思ったのかが気になるな。
知的興味が理由なら年齢で焦ることはないだろうし。
近い将来に仕事で使う必要があるのなら焦る気持ちもわかる。
学習する動機によっておすすめの方法も違ってくると思うんだが。どう?
0166デフォルトの名無しさん2008/08/12(火) 09:03:44
書いてあるじゃん
挫折しそうだから
くじけそうだから
もう後がなさそうだから
0167デフォルトの名無しさん2008/08/12(火) 09:45:28
俺なんて、40近くになってScheme始めたぞ。
独学でSICPをしこしこ解いてるよ。

同時に数学の勉強も始めたんだが、こっちがきつい。
数学基礎論のやさしい教科書はないかな。
0168デフォルトの名無しさん2008/08/12(火) 10:56:25
目的がいまいちはっきりしない質問者はやがて身の上話を始める法則

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

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

おおかた数理論理学か集合論の教科書を薦められると思うが
計算機科学との関連で何かもくろみがあるならこっちへ
http://science6.2ch.net/informatics/
0169デフォルトの名無しさん2008/08/12(火) 12:54:29
「数学」が何を指してるか知らんが、
基礎論は数学を勉強する支えにはならないぞ普通は。

集合論とか論理とかを学ぶなら基礎論には手を出していない
普通の教科書のほうが良い。
0170デフォルトの名無しさん2008/08/12(火) 13:28:48
>>168
ありがとうございます。覗いてみます。

>>169
そうなんですか?
集合論とか論理学から、計算機科学方面へ進めていきたいと思っていたのですが。
私の「基礎論」という言葉の使い方がおかしいのでしょうか?
集合論や論理学そのものを学んだほうが良いということでしょうか?
0171デフォルトの名無しさん2008/08/12(火) 18:36:29
>>146
仕様があればまともな言語なのぉ〜?
0172デフォルトの名無しさん2008/08/12(火) 18:40:24
「まともな言語」の集合を定義してください
0173デフォルトの名無しさん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
0174デフォルトの名無しさん2008/08/12(火) 20:05:34
計算機工学者のための計算機数学のとっかかりということなら、
島内さんの「数学の基礎」はどうかと思ったが、
http://www.amazon.co.jp/数学の基礎-島内-剛一/dp/4535601062
絶版で中古市場では高い!ヤフオクでも元より値が上がってる!
0175デフォルトの名無しさん2008/08/12(火) 20:22:59
竹内外史とかのは基礎論だよな?

と板違いか。
0176lischemep ◆/uyHCgG7qA 2008/08/13(水) 06:23:48
>>165
はじめのきっかけは、「普通のやつらの上を行け」を学生時代に読んでです。

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

目標としては、AllegroServeを使えるようになること、
On Lispを理解できるようになることです。
0177デフォルトの名無しさん2008/08/13(水) 07:40:49
>>176
まだ、shemeやcommon lispに馴れていないならば、SICPよりもう少し簡単なもの
からお勧めするよ。
schemerなら、gauche本でもいいし、common lisperならAnsi Common Lispや岩波
の本でもいいし。
0178デフォルトの名無しさん2008/08/13(水) 11:16:10
>>176
ポールグレアムって結局SchemeにもCLにも否定的じゃないか?
0179デフォルトの名無しさん2008/08/13(水) 14:30:39
>>178
どちらかといえばSchemeにもCLにも肯定的だと思うよ。
(Lisp族以外の言語に比べれば)
0180デフォルトの名無しさん2008/08/13(水) 16:20:52
PG
javaには否定的というのははっきりしてるし、C系に苛立ちを持ってるような記述も
みかけたことはあるかな。
0181デフォルトの名無しさん2008/08/13(水) 16:46:20
CとPerlは人気の言語として色々条件を満たしているみたいな話があったような
0182デフォルトの名無しさん2008/08/13(水) 18:55:38
40年も前から存在するのに
lispが全く存在感無い事について
想像力を働かせてみた方がいいと思うね
0183デフォルトの名無しさん2008/08/13(水) 20:29:28
>>182
どれだけの世界を見て生きてきたか知らんが、
あなたのちっぽけな経験で感じた存在感なんて
なんだというのだ
ふしあなか?
0184デフォルトの名無しさん2008/08/13(水) 20:42:17
>>183
頑張ってそれか?
「viaweb以外のインストールベースの例を教えてください」
って聞かれたらどうするの?
はいやりなおし!
0185デフォルトの名無しさん2008/08/13(水) 20:44:57
「実用性なんて飾りです。偉い人にはそれがわからんのですよ。」
くらい言わないと。
0186デフォルトの名無しさん2008/08/13(水) 21:16:40
>「viaweb以外のインストールベースの例を教えてください」

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

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

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

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

あとは必要と興味に応じてやっていけば良い。ひとつ注目したいのは圏(カテゴリー)論。
ひと昔前はGAN(GENERAL ABSTRACT NONSENSE)とか揶揄されたが様変わりで、
Haskellで圏論と言う言葉を知る人も増えたらしい。
0188デフォルトの名無しさん2008/08/13(水) 22:43:56
昔の本だと「数学基礎論」となっていても
真偽関数から始めて命題論理・モデル理論・述語論理・帰納的関数・・・と続き
最後にちょこっと公理的集合論が出てくる、というような感じで
>>170のやりたそうなことに内容的にはちょうどよかったんじゃないかと思うが
今はもっと効率的にやる方法もあるだろう
0189デフォルトの名無しさん2008/08/14(木) 00:16:28
>> 173, 187, 188
ご教示、ありがとうございます。

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

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

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

一番初めの目的はプログラミングや設計に役立てるためだったのですが、
いつのまにか、数学を学ぶこと自体が楽しくなってきてしまいました。
脱線して、計算機科学と関係ない方向に行ってしまいそうです。
0190デフォルトの名無しさん2008/08/14(木) 00:18:15
>>184
はいさようなら!
01911762008/08/14(木) 08:39:29
177さん

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

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

それと最近翻訳された実践Common Lispは初学者向けですか?
0192デフォルトの名無しさん2008/08/14(木) 09:00:16
>>191
そこは自分で考える部分だよ。

言語の取得って基本的に同時に複数をやるのはあまりよいとは思えないですね。
ゴールがなにか?を考えたら使用する言語は決まってくると思うけど。
LLな活動ならgauche で充分だけど、重い計算をさせるならcommon lispのほうが
当然向いてるし。
0193デフォルトの名無しさん2008/08/14(木) 10:15:16
>>192
同時にやるのが〜といったのは
(defun foo (arg1 arg2) ....)
(define (foo arg1 arg2) ....)
と微妙な違いの1例だけど、この違いがなれないうちは混乱に結びつくからだよ。
(defun foo (arg1 arg2)
....
(cond
[(= a b) ...]
....))

みたいになっちゃいけないし。
0194デフォルトの名無しさん2008/08/14(木) 10:18:31
>>193
それはcommon schemeだ。
0195デフォルトの名無しさん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
0196デフォルトの名無しさん2008/08/14(木) 20:27:19
「リスト遊び」とかどうだろう。Emacsが動けばすぐ試せるし。
0197デフォルトの名無しさん2008/08/14(木) 21:32:19
「プログラミングGauche」は全部理解する必要はないだろう。
特に第3部は必要な箇所だけ読めば良い。
0198lischemep ◆/uyHCgG7qA 2008/08/14(木) 23:53:22
皆様、色々と助言ありがとうございます。

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

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

>>197
それを聞いて少し安心しました。
0199デフォルトの名無しさん2008/08/15(金) 00:10:04
AllegroServeを使えるようになるにしろ、On Lispを読めるようになるにしろ、
実践Common Lispは良いテキストだと思うけどなあ。

漏れは、リスト遊びや、Elispの勉強は、上二つの目的には直接関係してこないと思う。
0200デフォルトの名無しさん2008/08/15(金) 07:36:30
>>199
禿同。実践本がマスターできたら、あとは自分で調べながら何でもやれるよ。
マクロもCLOSも書いてある本は他にないと思う。実践本のFOO言語の下りは
本当に素晴しい。

ちなみにAllegroServeは使うだけなら全然難しくないよ。
S式でややこしいListの構築の練習に良いかもね。
リスト遊びは名著だけど、泥臭くなさすぎる。
0201デフォルトの名無しさん2008/08/15(金) 21:17:10
教えてください.R5RSに記述されている手続き/シンタックスはすべて
syntax, library syntax, procedure, library procedure, optional procedureのいずれかに
分類されていますが,define, define-syntax, syntax-rulesに関しては上の分類別の記述がありません.
どのように考えれば良いでしょうか.すべて定義に必要なものですから基本的なものだとは思うのですが
単純にsyntaxの部類に属するとしてよいのでしょうか.
0202デフォルトの名無しさん2008/08/15(金) 22:01:12
define、define-syntaxは式ではないのでsyntaxではない
syntax-rulesは式ではないのでsyntaxではない

たぶん
0203デフォルトの名無しさん2008/08/15(金) 22:15:19
CLで言う所の特別式は値のある式だけど
R5RSではたとえば
(define x (define y 100))
などは許されない
0204デフォルトの名無しさん2008/08/15(金) 22:16:49
値のない式もあるから203の例は不適当だったか
0205デフォルトの名無しさん2008/08/15(金) 22:59:38
>>201
define, define-syntax, syntax-rulesは確かに書いてないねえ。
でも、こいつらはどう考えても手続きじゃないから分類するならsyntaxなんじゃないの?
0206デフォルトの名無しさん2008/08/15(金) 23:14:59
CLみたいに特別式、関数、マクロに単純に分類できないからねぇ
beginの扱いも微妙だし
0207デフォルトの名無しさん2008/08/21(木) 16:12:21
svnから引っ張ってきた最新版のgaucheをVCでコンパイルすると
実行時にしょっぱなのScm_Initでこけます。

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

スレチなら、適切な場所に誘導してもらえると嬉しいです。
0208デフォルトの名無しさん2008/08/21(木) 16:17:07
>>207
> スレチなら、適切な場所に誘導してもらえると嬉しいです。
http://www.lingr.com/room/gauche
0209デフォルトの名無しさん2008/08/21(木) 16:21:22
>>201
自分はsyntaxだと理解してきました。

ちなみにR6RSではsyntaxと明記です。
0210デフォルトの名無しさん2008/08/21(木) 16:32:12
>>208
ありがとうございます。
0211デフォルトの名無しさん2008/08/22(金) 10:08:30
http://natu.txt-nifty.com/natsutan/2008/08/lisp_186c.html

センスのないネタやね。この手の奴にlispを語ってほしくないな。sicpを
やってた奴みたいだが。
0212デフォルトの名無しさん2008/08/22(金) 11:21:48
どうでもいいものを、ここに張る奴もどうかしてる。
02132012008/08/23(土) 02:28:49
>>みなさま
いろいろお教えいただきましてありがとうございます
>>209 さんのご意見に従い
割り切ってsyntaxに入れてしまったのが簡単で良いかなと思っています
しかしこれらをあえてsyntaxから外してあるということは
R5RSはそれだけ厳密に定義されているということなんでしょうか
0214デフォルトの名無しさん2008/08/23(土) 14:07:51
R5RSは結構いい加減w
それ系のMLでも解釈について議論になってる。

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

どういう言語でも↓こういうことがあるもんなんです。
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html
そういうレベルの意味において「いい加減」
0215デフォルトの名無しさん2008/08/23(土) 14:32:15
静的型と仕様は頭の中にあればいいよ
0216デフォルトの名無しさん2008/08/24(日) 13:16:35
お前は頭の中で済むほど頭がいいのか?
0217デフォルトの名無しさん2008/08/24(日) 13:41:23
お前は頭の中で済むと思い込むほど頭がわるい人は多い。
0218デフォルトの名無しさん2008/08/24(日) 14:11:09
worse is betterを思い出した
頭のいい奴は複雑なものを作るから困る
0219デフォルトの名無しさん2008/08/24(日) 14:17:34
日本語は難しくてかなわん
S式で説明してくれ
0220デフォルトの名無しさん2008/08/24(日) 16:58:12
(define (難しい? 言語) (eq? 言語 '日本語))
(if (難しい? '日本語) 'S式でおk)
0221デフォルトの名無しさん2008/08/24(日) 18:06:39
>>220
コラコラw
0222デフォルトの名無しさん2008/08/24(日) 19:41:38
>>220
#<undef>
0223デフォルトの名無しさん2008/08/24(日) 21:16:28
ところでSchemeの仕様にむやみと未定義が多いのは何でなの?
なにかに決めりゃいいじゃん、nil でもいいからさぁ。
とりあえず決めた方が実用的になると思うんだけど。
0224デフォルトの名無しさん2008/08/24(日) 21:24:42
>>223
決めちゃったらもう変えれないだろ。
議論が尽くされてないところは決めるべきじゃないし、
実用のために不格好になるのは CommonLisp だけで十分。
0225デフォルトの名無しさん2008/08/24(日) 21:53:41
common lispが不恰好とな?
0226デフォルトの名無しさん2008/08/24(日) 22:26:38
少し認める
0227デフォルトの名無しさん2008/08/24(日) 22:44:55
>>223
決めちゃうことが(例えば性能的な)制約になる実装があり得るから
0228デフォルトの名無しさん2008/08/25(月) 00:15:13
rubyとか酷いよね
0229デフォルトの名無しさん2008/08/25(月) 00:26:43
gauche上の話なのですが、

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

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

こうすると、どうも(member X)の展開が上手くいかないようなのです。
これを上手く展開させる方法はありますか?
0230デフォルトの名無しさん2008/08/25(月) 00:29:57
>>229
本質的にマクロをわかってない。
あくまでもそういう書き方で展開させたいなら結構めんどいことになるよ。
0231デフォルトの名無しさん2008/08/25(月) 00:31:15
評価される場所でないと、マクロは展開されない。
define-class ごと再定義するのが良いだろう。
0232デフォルトの名無しさん2008/08/25(月) 00:46:58
>>230-231
ありがとうございます。
他のやり方を考えてみます。
0233デフォルトの名無しさん2008/08/25(月) 13:14:13
writeとかdisplayが真値を返さない可能性があるので
and-let*とかで処理をつなぐ時にいちいち
(begin (write obj) #t)とか書くのは不恰好な気がする。
せめて#<undef>は#fにはなりえない、くらいの制約は欲しい

(とはいえ、未規定の値を返す手続きが#fを(返す|返しうる)処理系は見たことないけど)
0234デフォルトの名無しさん2008/08/25(月) 20:56:28
* が前置されていたら次の式は #t を返したものとして扱う、てな
自分用and-letを定義したらどうよ。
0235デフォルトの名無しさん2008/08/25(月) 21:23:18
意味的に and じゃないとこで andなんちゃら を使っているのだから仕方ない
0236デフォルトの名無しさん2008/08/25(月) 22:07:51
letをネストしたくないのと、いちいち継続を捕捉して脱出したくないだけだろ
戻り値が未定義だというのは問題の本質ではないな
0237デフォルトの名無しさん2008/08/25(月) 22:13:41
朝起きたらLISPになっていますように
0238デフォルトの名無しさん2008/08/25(月) 22:22:37
つまり括弧を書きたくないだけだね。
フロントエンドでも作れば?
0239デフォルトの名無しさん2008/08/25(月) 22:43:16
HaskellのMaybeモナドっぽく使いたいわけですよ
いろいろマクロを書いて試してます

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

未規定値は#fかもしれないし真値かもしれないというのも気持ちが悪いです
もしかしたら(eq? (write obj1) (write obj2)) -> #fかもしれませんし
0240デフォルトの名無しさん2008/08/25(月) 23:00:06
個人的には、未規定値は使ったとたんにエラーになる処理系が好ましいな
0241デフォルトの名無しさん2008/08/25(月) 23:34:49
0個の多値を返せばいいじゃない
0242デフォルトの名無しさん2008/08/25(月) 23:54:07
and-let*の中で返り値が未規定な手続きを使ったり、
未規定値を比較する、といった発想が理解できない
0243デフォルトの名無しさん2008/08/25(月) 23:57:40
他コンピュータとの通信プログラムなどで
画面出力するというのが主ですね
クライアントプログラムなどでREPLの介入が出来ない場合
デバッグのための出力を埋め込んだりもします
0244デフォルトの名無しさん2008/08/25(月) 23:59:29
未規定値の比較は実際には行いませんよ
ただ真理値も同一性も規定されていないから
どうなるかはわからないといいたかっただけです
0245デフォルトの名無しさん2008/08/26(火) 00:46:26
なぬ? (begin (write "hoge") #t) が恰好悪いですと?
そんな時こそマクロ〜
0246デフォルトの名無しさん2008/08/26(火) 08:15:32
>>244
プログラミング向いてないのでは?
0247デフォルトの名無しさん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
こういうのでも末尾再帰になってるんでしょうか?
0248デフォルトの名無しさん2008/08/26(火) 20:17:38
fの呼出しは末尾呼出しになってますね
0249デフォルトの名無しさん2008/08/27(水) 09:03:03
>>239
ほんとにMaybeモナドみたいにしたいなら、そのように書くしか無いと思うよ
(有効な値は全部Justでくるむとか、逆に「有効な返り値と決してeq?にならない
値」を失敗を表すのに使うとか)。and-let*で#fを特別扱いしてるのは
「大抵の場合うまくいく」っていう一種の妥協で、>>239のアプリは
その「大抵の場合」から外れているってことだと思う。

0250デフォルトの名無しさん2008/09/01(月) 23:00:41
絶版になったと思ってたディヴィグ翻訳本
いつの間にかまた売られるようになってますね
3版ではなさそうですが
0251デフォルトの名無しさん2008/09/02(火) 19:44:54
little schemerの継続の所が凄くわかり辛い(関数名からして意味不)
今の段階ではこういうのもあるって知っておく程度で詳細は他の本でカバーしろって事かな?
0252デフォルトの名無しさん2008/09/02(火) 21:00:46
頑張れ、ここで派を食いしばれってこと。
ドリルみたいなもんだから、逃避したら身には付かない。
■ このスレッドは過去ログ倉庫に格納されています