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


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

Lisp Scheme Part19



1 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 00:14:56 ]
過去スレ
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/
Part9: ttp://pc2.2ch.net/test/read.cgi/tech/1069594582/
Part8: ttp://pc5.2ch.net/tech/kako/1058/10582/1058263391.html
Part7: ttp://pc5.2ch.net/tech/kako/1042/10421/1042167213.html
Part6: ttp://pc3.2ch.net/tech/kako/1031/10315/1031560687.html
Part5: ttp://pc3.2ch.net/tech/kako/1023/10230/1023091882.html
Part4: ttp://pc.2ch.net/tech/kako/1016/10162/1016211619.html
Part3: ttp://pc.2ch.net/tech/kako/1008/10082/1008220265.html
Part2: ttp://pc.2ch.net/tech/kako/1002/10025/1002584344.html
Part1: ttp://piza2.2ch.net/tech/kako/987/987169286.html

677 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:23:57 ]
再(再(再(再帰)帰)帰)帰

678 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:56:02 ]
C/C++で仕事するのが面白くなくて辛いです。
Scheme勉強するのは楽しいです。
仕事の時間は無駄な時間に感じます。

679 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:04:03 ]
仕事というのはそういうものですよ

680 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:17:53 ]
確かに、金をもらわなきゃ誰もやらないようなことだからこそ、
金をもらえるんだものね。
金なしでやる人が大勢いるようなことなら、誰も金を出すわけない。

681 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:25:36 ]
家に帰ってSchemeにポートするつもりで作れYO!
ようやって作ったScheme版で独立すれば?という夢ぐらいは持ちたいものだw

682 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:27:08 ]
だれかR6RSの日本語訳早く作れよ

683 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:15:56 ]
R6RSの解説を読んだら、Schemeの欠陥が色々書いてあった
CLは細かいところまでよくできてるっぽいし
見かけによらないものだなーと

684 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:50:01 ]
>>677
先頭の再と末尾の帰が!

685 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:52:27 ]
>>683
>CLは細かいところまでよくできてるっぽい
と思えない俺は異常かおrz



686 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:13:30 ]
(再(再(再(再帰)帰)帰)帰)

687 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:13:33 ]
Common Lisp規格まとめ役のスティール親分が、
Schemeみたいにsymbol-valueとsymbol-functionを統合しとけば良かったなあ
けど互換性を重視したから難しかったんだよ
そう言っておられたぞ。

688 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:35:56 ]
Gauche-libsvmのリンク先に飛べない

Gauche c-wrapperはswigみたいなもの?
なんでswigにしなかったの?


689 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 05:46:08 ]
>>687
へー、初耳だ。
どこで言ってたの?


690 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 09:35:15 ]
>>686
それでよし

691 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 09:37:24 ]
>>687
>symbol-valueとsymbol-function
CL最醜の汚点だと思う

692 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 11:14:06 ]
>>689
bitの井田さんのインタビューかな?

693 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 12:06:12 ]
>>691
ちなみに、funcallを書くのは面倒だけど
フォームの頭に構文の名前 (funcallやlambdaやifやマクロの名前) を必ず書きましょう
と考えると汚くはない

funcallが汚いんじゃなくて、funcallを省略できる設計が汚い

694 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 12:10:21 ]
funcallはあまり気にならないな。むしろ判りやすい。
SPECIAL変数付近の扱いはちょっと汚いかなと思う。

695 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 12:54:19 ]
個人的にはCLで名前空間が単一/一様でないのは気にかかるところだ
関数とその他の値とを区別無くfirst class objectとして扱うコードを
書きたいときに柔軟性を制約する一因とはならないのだろうか?



696 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 12:58:11 ]
>>693
その話は関連する話ではあるけど、
symbolがsymbol-valueとsymbol-functionの二つ持つという話そのものから、
ちょっと離れていっていると思います。
一つしかない場合もその種の議論は成立するのですから。

>>694
スペシャル変数は、スレッドローカルな変数とか、
elispみたいなバッファーローカルな変数と同様の「パターン」で、
ある種のライブラリ、応用にはとても自然なeval拡張だと思う。
別の機構も考えられるけども、とてもLisp的だと思う。
(拡張というのはレキシカルスコープなevalに対して)

697 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:01:00 ]
>>695
そういう「特殊な」ことをやる場所ではfuncallを使う。
そういうとこへ関数を渡すときは #' を付けてましょう。
というのが CL 的発想だと思う。大きなプログラムの中での可読性を
考えれば、そんなに悪くないと思う。
純潔なSchemerには我慢できないだろうけど。w

698 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:29:54 ]
>>695
> 関数とその他の値とを区別無くfirst class objectとして扱うコードを

CLが違うのはシンボルにセルが2つあるのと関数を適用するときの特別扱いであって、
「区別無くfirst class objectとして扱う」こと自体は普通に書けるじゃん。

699 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:40:16 ]
座席が区別されてるだけで乗客は区別されない

700 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:43:02 ]
>>696
>一つしかない場合もその種の議論は成立する
そうです
Schemeでも関数なのかマクロなのか判断できなくて困ることがある
CLを汚いと言えるほどSchemeは綺麗じゃない

変数と関数じゃなくて
コンパイル時と実行時とで名前空間を分ければいいのかな?

701 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:44:44 ]
俺は人間が汚れてるから、ちょっと汚い言語のほうが好きだな

702 名前:695 mailto:sage [2008/02/22(金) 13:51:18 ]
>>697>>698>>699
なるほど

703 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:21:19 ]
>>688

>Gauche c-wrapperはswigみたいなもの?
そう、ヘッダファイルからスタブを自動生成して関数やデータやマクロなんかをGaucheで使えるようにするもの。

>なんでswigにしなかったの?
最初swigを見たとき、バインディングの作り方がよく分からなかったから。
あと、コンパイルとかInterfaceファイルを作るのが面倒そうだったから。

704 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:07:34 ]
The Reasoned Schemer

この本はどのような人を対象としてるか読んだ人分かりますか?
なんかProlog的なコーディングをSchemeでもできるという紹介
文でしたが、これはScheme的ではない異色の内容なんですかね?

705 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:21:57 ]
とてもScheme的な応用の本。
言語プリミティブ的なものが応用対象だから。



706 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:18:06 ]
LispとPrologとは両輪だという話を読んだ覚えがある。
On LispでもPrologやってるし。

707 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:20:49 ]
両輪というより、レイヤーが違う感じかな

708 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:30:57 ]
Lisp/Schemeにはないが、
ML/Haskellはパターンマッチ渡しがあるから、
論理型言語とは「項書換えシステム」で統一的な見方ができる。
The Reasoned Schemerはその点でも面白い。S式は面白い。

709 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:50:24 ]
買ってみようかな

710 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:58:54 ]
The Little Schemerで教えてください。 P.121です。

1> (apples peaches pumpkin pie) はrelではない。なぜならペアのリストではないから。
2> ((apples peaches) (pumpkin pie) (apples peaches)) はrelではない。ペアのセットではないから。
3> ((apples peaches) (pumpkin pie)) はrelですか? yes
4> ((4 3) (4 2) (7 6) (6 2) (3 4)) はrelですか? yes
どういうことなのかさっぱりわかりません。

711 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:02:25 ]
>>710
まだそこまで読んでない。


712 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:09:41 ]
「セット」は重複要素を許しません。それで後は分かりませんか?
;; カッコに全角を使うのは辞めてください。釣りかと思います。

713 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:15:06 ]
>>712
サンクス!そういうことか!
ていうか、章の始めで教わってんじゃん・・・1日悩んじまったorz
全角ゴメン。気をつけます!

てかP.121じゃなくてP.119だし・・・

714 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 19:07:24 ]
javascriptがlispに匹敵する表現力があるって聞いたのだけど本当?

715 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 19:39:24 ]
brainfuckですらLispに匹敵する表現力がありますけど?



716 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 19:40:14 ]
>>714
ecmaスレで聞けよw

717 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:31:44 ]
アセンブラ表現力最強ですけどっ!!

718 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:35:09 ]
表現力最強じゃなくて記述力最強だ
まあいいや

719 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:37:18 ]
どちらにしても曖昧だな。強弱比較できるような概念でもあるまい。

720 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:01:45 ]
スペックじゃんけんがしたいならHaskellを選べばいいと思うよ。

721 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:11:19 ]
brainfuckにすら負けてる正規表現やcppの立場って・・・

722 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:19:45 ]
そのためのPEGとtemplateだろ?

723 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:19:15 ]
初心者は抽象化が苦手だ、とMatzが言ってた
チューリング完全性だけが重要なら、抽象化はどうでもいいはずだが、現実は違う

724 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:48:20 ]
>>714
JavascriptのクラスシステムはJavascriptで書かれてます。
次のバージョンからは組み込みになりますが。
prototype base object systemあたりでググってください。

725 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 13:22:52 ]
Little schemer P122 P123 に出てきた

Go and get one!
Or better yet, make your own.


”先へ進んで、完璧を目指せ!
もっといいのは、自分の力でやることだ。”

という意味であってる?



726 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:17:26 ]
>>725

邦訳の「Scheme手習い」元吉文男、横山晶一訳 
たぶん、7章の最後の文だと思うんだけど。

「自分で行って手に入れよ。
さもなくば、独自のものを作れ」

となっている。

727 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:34:52 ]
俺はなんかそんな堅苦しいメッセージじゃなくて、
「ここで一休み、お菓子取ってきなよ♪
 でなきゃ、自分で作ってみてはどうかな?」
という意味に取ったけど。

728 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:38:29 ]
>>726
全然違ってた。。

邦訳なんかあったんだ
まあ内容には関係ないからいいか

>>727
お菓子はないだろw

729 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:41:23 ]
>>728
いや、まじめに。だってクッキーの作り方書いてあるじゃん。

730 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:50:15 ]
>>726
その訳でクッキーのレシピはどうなってるの?

731 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:53:27 ]
>>729
ああ、あの囲みのコード?
おれはてっきりあれを自分で完成させろということかと思った。
アメリカンジョーク?

732 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:55:26 ]
>>731
あのコードをみて Make your own cokkies.ということかと・・・・

てか、度々「一休みしてお菓子食べなよ!マスタード忘れないようにNE!」
みたいなメッセージが出てきてるじゃん?

733 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:58:15 ]
>>730
クッキーのレシピがlambda式風に書かれている。

戒律風に訳されているので、この部分も戒律風にわざと訳したのかもね。

734 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:00:22 ]
(define クッキー
  (lambda ()
   (焼く
    (quote (180 度))
    (quote (12 分))

735 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:02:47 ]
>>733
そんな風になってるのか。



736 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:02:51 ]
アメリカンジョークというより、ウィットという感じかな。

737 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:03:45 ]
もうフリードマンさんの本全部読んでみたくなってきたw

738 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:17:17 ]
>>725
後半は、
「まだまだいいのがあると思うなら、自分で作ることだね」


739 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:45:50 ]
www.ccs.neu.edu/home/matthias/BTLS/

> A Food Preparation Place

740 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 10:57:55 ]
Little Schemer
Seasoned Schemer
Reasoned Schemer

があるんだけど、Little Schemerだけ紙質が悪いんだが
何で?わら半紙みたいでツルツルしてない。

741 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 11:25:16 ]
>>738
それが一番しっくりくるかな

742 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:49:27 ]
>>740
学生用のテキストは安いのを作ることがある。


743 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:04:29 ]
>>742
ツルツル版もあるの?

744 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:05:50 ]
ハッ!ハッ!ハッ!ハッ!
はげまるくーん

745 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:16:05 ]
醤油こぼしたらオシマイだよ。



746 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:17:46 ]
Schemeすげー、関数を渡せるなんて。C#のdelegateの構文に似たような
ものがあったな。

747 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 20:41:32 ]
関数ぐらいCでも渡せるだろう

748 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 23:13:03 ]
クロージャにしても継続にしても
Cでスタックを使うところにヒープを使えば自然と思いつきそうなものだが
Schemeみたいな高級言語で教えるのとどっちが分かりやすいのかね

749 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 23:15:36 ]
>>747
ポインタはね。関数は無理なのよ。しかも定義を呼び出し関数内に書ける
のがいい。C++のBOOST_FOREACHに似てる感覚。

750 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 23:56:38 ]
JavaScriptでも出来るぞw

751 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 00:05:37 ]
高級言語ならそれぐらい出来て当然

752 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 00:22:34 ]
高級言語w

753 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 03:20:15 ]
wが意味するところがよくわからないんだが、
巷ではJavaScriptって、高級低級で二分するなら低級のほうに入るのか?

754 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 03:29:40 ]
それはないw

755 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 03:39:48 ]
javascriptは超高級だと思うぞ

高級・低級の分かれめってなんだか知らない(たぶん、時代によって変わる)けど、
lambdaが使える言語はみな高級だと思う。
あと、低級っていっても馬鹿にしてるわけじゃないことをお忘れ無く。




756 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 03:54:56 ]
プログラミング初心者が集まる言語のスレなら
「ひょっとしてこの人、高級の意味を誤解してるのかな」
という想像が最初に来るところだけど、Lispスレだからな。一応「その心は?」と聞きたくなる。

757 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 04:36:48 ]
まあ高次とか低レイヤーとか書いたほうが語弊は少なさそうだな
意味わかりにくくなるけど

758 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 09:18:13 ]
機械語に対してほとんど全てのプログラミング言語は高級言語だけどね。
今低級・高級を再定義するなら、機械が直接対応しない概念(クロージャとか)を
扱えるものが高級言語、でどうだろう。
シンタクスによる区別だったのをセマンティクスによる区別で再定義というか。

759 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 09:35:06 ]
実際のところ、CやC++のコンパイラは関数型言語で記述されてますか?

760 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 09:43:06 ]
されてません

761 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 10:07:48 ]
環境にアクセスできるクロージャへのポインタを渡すのはCでは無理だな

762 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 12:28:20 ]
boost.lambda
ならあるぞ

763 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 12:40:47 ]
c-wrapperのデモビデオがみれなくなってる
std::vectorとかポインターをcに渡すことはできるの?

764 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 12:48:11 ]
>>760
何で記述されてますか?

765 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 12:50:28 ]
「Cは昔、関数型言語って呼ばれてました。
値を返さない手続きがない(void以前)ので」ってオチ禁止



766 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:44:35 ]
CコンパイラはCで書かれてることが多いんじゃないかな?
あまり関係ないけど
GCCはLispライクな中間コードにコンパイルしてから
CPUコードを出力するって聞いたことがあるけど

767 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 15:31:53 ]
Little Schemerだけど Chapter 8から難しくなってきた。

--------------------------------------------------------
The Tenth Commandment

Build functions to collect more than one value at a time.

”一度に複数の値を集めるための関数を作れ!”
--------------------------------------------------------
これが言わんとする深い意味はなんですか?

直前のmultiremberEco関数の例で確かに二つのリストに振り分けてるのは
理解できるんだけど。(tunaに一致するもののリストと一致しないもののリスト)

条件に応じて、その条件を満足する値(アトムなど)あるいは満足しない値を集めろ!
って意味なのかな?

768 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 21:33:46 ]
>>763
>c-wrapperのデモビデオがみれなくなってる
今確認してみましたが、こちらからは見れました(ホームページのやつですよね)。

>std::vectorとかポインターをcに渡すことはできるの?
ポインターの受け渡しはできますが、今のところ c-wrapper は C++ には
対応していないので、残念ながら std::vector は無理です。



769 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 22:25:51 ]
>>767
俺もそこらへん読んでる。急に難しくなってきたね。
説明できないのでもうちょっとよく読んでみる…

770 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 00:44:35 ]
> multiremberEco
multirember&co関数かと。

771 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:04:22 ]
little schemer - multirember&co - reprise for dec 2006
groups.google.co.jp/group/comp.lang.scheme/browse_thread/thread/a059f78eb4457d08/be4705d06e96a2e4?hl=ja&lnk=gst&q=little+schemer+-+multirember%26co#


772 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 02:16:04 ]
>>767
「at a time」でやることによって、
純関数型に特徴的なプログラミングスタイルが登場します。

昔birdが書いたコンパイラの純関数型ワン・パス・パーザや,
DanvyのTABA(There and Back Again)パターンや、
purely functional algorithmに出てくるようなコードなどでも
この章で使うようなテクニックが使われてます。

Little Schemeは非常に簡単な例でやっているので、
何が何だか分からない奇妙なパズルをやらされている気分になるかもしれませんが、
無意味なことはほとんどないので、著者を信じて頑張ってください。

まあバリバリ手続き型で書きたい人には苦行すぎる面もありますが。


773 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 12:01:59 ]
>>770
&か。何の文字かわからなかった。

>>772
実用的なコードの源泉かあ。
今は習うより慣れろのレベルだけど、Schemerシリーズは全部やる。
単純な例でも脳の体操にもなるし。

774 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:26:31 ]
www.amazon.com/Scheme-Programming-Language-3rd/dp/0262541483/

The Scheme Programming Language, 3rd Edition

これは評価が高いですが、やはり良書ですか?
CのK&R相当らしく、数日でたくさん学ぶ人もいるらしいですが
どうなんでしょう。

775 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:42:06 ]
>>774

Second Edition と村上さんの邦訳をもっているけど、
3rdはかなり改訂されてるんかい?



776 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:49:40 ]
www.scheme.com/tspl3/

777 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:55:25 ]
>>776

おお、公開されてるんだ。Dybvigさん、太っ腹。

778 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:59:06 ]
Schemers.Incの「The Schemer's Guide」が好きだったなぁ。
初心者向けの良い本だと思う。

779 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:08:16 ]
Little Schemer P146
にある以下のプログラムなんですが、

(define evens-only*&co
(lambda (l col)
(cond
((null? l) (col (quote ()) 1 0))
((atom? (car l))
(cond
((even? (car l)) (evens-only*&co (cdr l)
(lambda (newl P S)
(col (cons (car l) newl) (* (car l) P) S))))
(else (evens-only*&co (cdr l)
(lambda (newl P S)
(col newl P (+ (car l) S)))))))
(else
(evens-only*&co (car l) ; ここから以下がよく理解できない
(lambda (al ap as)
(evens-only*&co (cdr l)
(lambda (dl dp ds)
(col (cons al dl) (* ap dp) (+ as ds))))))))))

特に (col (cons al dl) (* ap dp) (+ as ds)) とする意味が分かりません。
こういうものはどういう思考で捉えていけば良いのでしょうか?
具体値で考えると確かに正しいことは分かるのですが、それを一般式で
表すのが難しくて思いつきません。



780 名前:779 mailto:sage [2008/03/02(日) 00:31:17 ]
具体値を入れて考えたメモを見ていたら何となく見てきました。

(evens-only*&co (car l) ; ここから以下がよく理解できない
(lambda (al ap as)
(evens-only*&co (cdr l)
(lambda (dl dp ds)
(col (cons al dl) (* ap dp) (+ as ds))))))))))

(car l) と (cdr l) について再帰してそれぞれの結果を得る。
まず、(cdr l) に対して結果を得る。つまり、dl dp ds が具体値に
決まる。その後、その結果に対して、(car l) に対する再帰の結果
である al ap as を得て、(cdr l) に対する結果とマージする。

よく分からなかったのはlambda関数のパラメータでした。
自分としてのキーポイントは、
@lambda関数のパラメータが具体値に求まる。
Alambda関数のパラメータが具体値に求まる順番はネストの深い
ものから始まる。

という風に考えるとよいかなと思いました。

781 名前:779 mailto:sage [2008/03/02(日) 00:36:37 ]
表現がおかしかったです。

(evens-only*&co (cdr l)
(lambda (dl dp ds)
(col (cons al dl) (* ap dp) (+ as ds)))

要は、まず上の部分の (cdr l) の再帰が先に終了し、そのパラメータであるdl dp ds
が具体値に求まる。その後で、具体値に求まったdl dp dsとともに
(evens-only*&co (car l) (lambda (al ap as) ・・・の (car l) の部分の再帰が行われる。


782 名前:779 mailto:sage [2008/03/02(日) 00:42:43 ]
やはりパラメータが具体値に求まるというのはおかしいですね。
パラメータは変数なので。。

ただ具体的な値で追っていくと、例えば

(col (cons al (2 4)) (* ap 8) (+ as 4)))

みたいな感じで、dl dp ds 部分が決まっていくようです。
パラメータが具体値に求まるというのは、その程度の意味です。

783 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:58:27 ]
>>779-782
; direct style
(define (fact n)
(if (= n 0) 1
(* n (fact (- n 1)))))

; accumulator style
(define (fact n) (factacc n 1))
(define (factacc n acc)
(if (= n 0) acc
(factacc (- n 1) (* n acc))))

; continuation passing style
(define (fact n) (factacc n (lambda () 1)))
(define (factacc n cc)
(if (= n 0) (cc)
(factacc (- n 1) (lambda () (* n (cc))))))

accumulator styleは演算子が可換、
あるいは逆から数え上げることが可能(e.g. (from n) ←→(to n))でないと困る。
例えばリストに対する演算の場合。consは可換でない。







[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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