5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

【SICP】計算機プログラムの構造と解釈【Scheme】

1 :デフォルトの名無しさん:05/02/02 21:02:18
「計算機プログラムの構造と解釈」に関する議論とQ&Aの為のスレです。

SICP(英語)
http://mitpress.mit.edu/sicp/full-text/book/book.html
「計算機プログラムの構造と解釈」の原書です。
全てオンラインで読めます。

計算機プログラムの構造と解釈 第二版 (snip) に関連するホームページ
http://www.ipl.t.u-tokyo.ac.jp/sicp/

書籍情報(Amazon)
http://www.amazon.co.jp/exec/obidos/ASIN/489471163X/250-3648248-8159430

Lisp一般に関する話題は
CommonLisp Scheme Part12
http://pc5.2ch.net/test/read.cgi/tech/1100229366/l50

2 :デフォルトの名無しさん:05/02/02 21:19:03
『計算機プログラムの構造と解釈第二版』を読む
http://openspace.timedia.co.jp/~nyama/wiliki/sicp.cgi

「計算機プログラムの構造と解釈 第二版」を読む会について
http://www.javaopen.org/jfriends/sicp.html

『計算機プログラムの構造と解釈 第二版』を読むメイリングリスト
http://www.sampou.org/cgi-bin/scheme.cgi?SICP%3aMailingList

『計算機プログラムの構造と解釈 第二版』解答集(未完)
http://oss.timedia.co.jp/index.cgi/kahua-web/show/SICP/Answer%20Book


3 :デフォルトの名無しさん:05/02/02 21:19:57
関連スレ
人生ばくち打ち
http://pc5.2ch.net/test/read.cgi/tech/1107346286/

4 :デフォルトの名無しさん:05/02/02 21:26:37
>>3
全然関連じゃないし…

この本、日本語訳が糞だっていうけどどの程度糞なんだろう。普通に読めるけど。

5 :デフォルトの名無しさん:05/02/02 21:41:12
この本は濃いね
本当に恋

6 :デフォルトの名無しさん:05/02/02 22:35:26
んなこたーない。本当に読んだのか?


7 :デフォルトの名無しさん:05/02/02 23:00:23
>>4
漏れはむしろこの訳が好きだ。

8 :デフォルトの名無しさん:05/02/02 23:37:58
英語でも十分わかりやすかったけどな。
変な用語に悩むより原文を読む方がよっぽどいいと思う。タダで見れるし。



9 :デフォルトの名無しさん:05/02/03 00:08:20
問題2.6
対を手続きで表現することがそれほど驚きでなければ、
手続きを操作できる言語では、0と、1を足す演算を

(define zero (lambda (f) (lambda (x) x)))

(define (add-1 n)
(lambda (f) (lambda (x) (f ((n f) x)))))

と実装することで、(少なくとも非負の整数だけを問題とする限りは)
数を使わないで済ませることが出来ることを考えよう。
この表現は発明者Alonzo Churchに従い、Church数として知られている。

このへんよく分からん。そういういう風に自然数を定義するってことかな。

10 :デフォルトの名無しさん:05/02/03 01:07:59
そう。


11 :デフォルトの名無しさん:05/02/03 02:34:47
>>9
…なんか英語より読みにくい文だね、これ。

12 :デフォルトの名無しさん:05/02/03 03:37:56
後半の方が面白いので、これから読む人はSchemeの言語をさらっと勉強して
前半は飛ばして後半に直接攻め込んでいいと思う。


13 :デフォルトの名無しさん:05/02/03 03:40:07
以後訳ネタは激しくつまらないので禁止
訳に不満があるなら英語で嫁
もし次スレがあるなら、これをテンプレに追加しといてくれ

14 :デフォルトの名無しさん:05/02/03 04:01:14
>>12
というと4章以降?

15 :デフォルトの名無しさん:05/02/03 06:24:53
人によっては3章以降。環境フレームがわかってれば3章は飛ばしてok。


16 :デフォルトの名無しさん:05/02/03 16:04:27
HHKといいThe Art of Computer Programmingといいこの本といい…
身の回りに和田英一がたくさん…

(((( ;゚Д゚))))

17 :デフォルトの名無しさん:05/02/03 16:25:13
HHKB の人も和田サンだっけ?

18 :デフォルトの名無しさん:05/02/03 19:46:02
そして毎月送られてくる情処。


19 :デフォルトの名無しさん:05/02/04 09:38:30
http://oss.timedia.co.jp/index.cgi/kahua-web/show/SICP/ex-2.76
データ主導とメッセージパッシングがどう違うのかわからん。

両方とも、型の追加はしやすく演算の追加は面倒、という特性を持っているように思えるんだが。
データ主導で書いても、後から演算を追加したくなったら各install手続きごとにせっせと足さなきゃ
いけないじゃん。でもこの表だとそうなってないし、sicp本文でもそう書いてない。

20 :デフォルトの名無しさん:05/02/04 12:39:36
いずれにせよ Δ演算数×型数 or 演算数×Δ型数 の分のコードは必要でしょ。
問題はそれがどういう変化かということじゃない?

データ主導だとinstall-*に追加した部分をevalればシステムをリスタートしなくて
いいし、そもそも型ごとのパッケージであるinstall-*に全ての演算を叩き込む
必要も必ずしもなくて、演算ごとにパッケージを構成すればコード追加だけで済むよ。
同じような処理をするときに関数も流用しやすいし。




21 :デフォルトの名無しさん:05/02/05 00:15:03
なるほど。演算ごとにパッケージを構成すればいいのか。
データ主導がテーブルを「列」で処理するのに対し、メッセージパッシングは「行」で処理
するとか書いておいて、本文中の例だと両方ともpolarとrectangularで分けていたから混乱してたわ。


22 :デフォルトの名無しさん:05/02/05 04:33:28
http://www.sampou.org/scheme/sicp/mailingList/msg00059.html
つまりこの図にもある通り、
データ主導>メッセージパッシング
ってことか。

23 :デフォルトの名無しさん:05/02/07 23:53:59
3.1〜3.3まで読んだ。
3.3.3までは>>15のいう通りで、わかってれば読む必要はない。

3.3.4は簡単な論理回路シミュレータ。3.3.5の前座という感じ。これも飛ばして
もいいかな。なんでdelayの値がand,or,notで違える必要があるのか謎。

3.3.5は制約伝播システム。
x + y = z みたいな関係(=制約)で任意の2変数の値が決まったときに残りの変数が
決まるような仕組。知らなかったので面白かった。

Scheme言語はわかってもSchemeで実際にプログラムを書くときの感覚が
いまひとつ掴めてなかった(CやJava系統なら綺麗なものが書ける経験と自信は
あるんだけど)ので、それがなんとなくわかるのもよかった。

英語版を読んでいるので邦訳の用語とは違うかもしれませんが悪しからず。


24 :デフォルトの名無しさん:05/02/21 17:09:09
3.5まで読んだのでage。


25 :デフォルトの名無しさん:05/02/21 19:01:00
別に報告しなくていいよ

26 :デフォルトの名無しさん:05/02/21 20:05:55
過疎化してるし、してもいいんじゃない。
嫌なら >>25 がネタを出せば。


27 :デフォルトの名無しさん:05/02/24 12:52:07
問題2.20
一つかそれを超える個数の整数をとり、
先頭と同じ偶奇性を持つ引数のリストを返す手続きsame-parityを書け。

で可変個の引数の話が出てくるけど、こういうときの再帰呼び出しってどうするのが普通なんだろう…
一応consでつないでリストにしてそれにapplyで適用するのを書いてみたんだけどこんな感じで良い?

(define same-parity
(lambda (factor . ls)
(if (null? ls)
'()
(if (check factor (car ls))
(cons (car ls) (apply same-parity (cons factor (cdr ls))))
(apply same-parity (cons factor (cdr ls)))))))

checkは偶奇性を判定する手続き。

28 :デフォルトの名無しさん:05/02/24 12:55:17
うんこ

29 :デフォルトの名無しさん:05/02/24 13:23:11
再帰の練習? 普通はfilter使って書いちゃうと思うけど。
filterはSRFI-1にあるから処理系が用意しているだろうし、
なくても簡単に書けるよね。

(define (same-parity beg . args)
(let ((parity (odd? beg)))
(cons beg
(filter (lambda (x) (eq? parity (odd? x))) args))))

(define (filter pred lst)
(let loop ((lst lst) (r '()))
(cond ((null? lst) (reverse r))
((pred (car lst)) (loop (cdr lst) (cons (car lst) r)))
(else (loop (cdr lst) r)))))


30 :(define (´∀`) 'マターリ):05/02/24 14:22:40
(define (same-parity beg . args)
(cons beg (filter (if (odd? beg) odd? even?) args)))

31 :デフォルトの名無しさん:05/02/24 15:00:38
おっと、これは一本とられましたな。


32 :(define (´∀`) 'マターリ):05/02/24 15:32:36
(define (same-parity beg . args)
(cond ((null? args) (list beg))
((eq? (odd? beg) (odd? (car args)))
(apply append (list beg (car args)) (map (lambda (x) (cdr (same-parity beg x))) (cdr args))))
(else (apply same-parity beg (cdr args)))))

33 :デフォルトの名無しさん:05/02/24 15:39:48
毎回毎回引数フレームに積むの? 効率悪そうだなあ。


34 :デフォルトの名無しさん:05/02/24 18:13:05
>>29
あーなるほどねー便利。

SRFIとかも調べてみようと思った…orz

35 :デフォルトの名無しさん:05/03/02 23:20:57
>>13
自分で訳すってのはどう?

36 :デフォルトの名無しさん:05/03/03 01:30:01
英語で嫁とか言う奴は自分で訳して貼り付けてみろ
…ザクしてやるよ


37 :デフォルトの名無しさん:05/03/03 02:33:25
以後会話はSchemeの文法ののっとって行うこと。日本語禁止。

38 :デフォルトの名無しさん:05/03/04 00:27:10
(((;゚Д゚)) ガクガクブルブル)

39 :デフォルトの名無しさん:05/03/04 19:38:53
>>36
むしろ英語の本って読めるもんなんだと感動する本
ハリポタは難しくて読めないけど

40 :デフォルトの名無しさん:05/03/04 22:04:48
柔らかい表現を好む媒体ほど、ネイティブ以外には難しくなるからねえ。
硬い表現の多い専門書は読みやすいやね。

# 硬い表現だろうが、彷徨えるオランダ人(誰)の書いた英語は読みづらいが。

41 :デフォルトの名無しさん:05/03/05 21:14:54
>>40 たしかに。operandとかpretty printとかそのまま日本語で使われている技術用語も多いというのもあるかな

Schemeってオブジェクト指向なんかよりもよっぽど洗練されてて知的だね
大学の教養科目でやってもいいんじゃないかと思う。
瑣末な技術的詳細に触れないで入門できるんじゃない?


42 :デフォルトの名無しさん:05/03/05 21:29:36
pretty printって何?
かわいく印刷するってこと?

>Schemeってオブジェクト指向なんかよりもよっぽど洗練されてて知的だね
オブジェクト指向のどこが洗練されてなくて、知的でもないのか詳しく教えて。

43 :デフォルトの名無しさん:05/03/05 21:43:01
>>42
>オブジェクト指向のどこが洗練されてなくて

ここで、「洗練されていない」という言葉に噛み付くのは カコワルイ。

オブジェクト指向とは「技術」であって、「学問」ではない。
体系化される事が目的では無くて、実戦で役に立つ事が目的。
むしろ洗練されていないことを誇りに思ってもいい位。


44 :デフォルトの名無しさん:05/03/05 22:35:09
>>42
見易く出力。適当に改行したりとかインデントしたりとか。


45 :デフォルトの名無しさん:05/03/05 22:35:28
何をもってオブジェクト指向というのか分からないや。

46 :デフォルトの名無しさん:05/03/06 00:32:43
計算機系の文章は正確さを重視するから、まわりくどかったり冗長だったりするから英語でも分かりやすいね。
慣れてないと日本語でも分かりにくいけど。

47 :デフォルトの名無しさん:05/03/06 01:07:08
>>43
そのようなつもりで書いたわけ。べつに、学問>技術といっているわけではないし、
漏れは情報科学とかの専門家でもないし、プログラマでもないから、実践的な技術
よりも、そのような論理的にすっきりしたほうが興味深い。実際、コンピュータの
専門以外の人にこそ、SICPのような本がプログラミングの概観するためのものとして、
より受け入れられるんじゃないかと思うよ

プログラミングの本は理系の割に「科学的」でないことが多いけど、SICP読むと
論理的な解釈を重視しているのが面白い。

誰かの受け売りかもしれないけど、オブジェクト指向はプログラムの骨組みを提供する言語、
Schemeのような関数型言語はアルゴリズムをわりと直接的な形でプログラムに落とすための言語、と言えるんでない?


48 :デフォルトの名無しさん:05/03/06 05:15:12
オブジェクトより関数の方が基本的なものだから
よりキレイに見えるのは当然かも

49 :デフォルトの名無しさん:05/03/06 08:18:50
ha?

50 :デフォルトの名無しさん:05/03/06 10:44:08
SICPで学べないこと。OO厨との不毛な議論を避ける方法。

51 :デフォルトの名無しさん:05/03/06 11:38:15
>>50
3章のカプセル化の例を教えると大抵の厨はビビるけどな

52 :デフォルトの名無しさん:05/03/06 19:06:12
でOOの背景理論になりそうだったのをぶちこわしたのがSchemeだと教えればカンペキ。

53 :デフォルトの名無しさん:05/03/06 19:16:47
手続き型OOPLほどメジャーではないし
関数型言語ほど美しくもなく生産性の高くない半端言語

54 :デフォルトの名無しさん:05/03/06 19:36:16
>>48
まあそういうこと。Schemeって、「言語オタ」になりえない言語だと思う。

55 :デフォルトの名無しさん:05/03/06 21:43:31
ほら、>>53みたいな厨は話をそらすしかなくなるから
後はスルーで十分。

56 :デフォルトの名無しさん:05/03/06 21:51:03
クロージャ = オブジェクト ですがなにか?

57 :デフォルトの名無しさん:05/03/06 21:53:51
多態するクロージャってのも、キモいな。


58 :デフォルトの名無しさん:05/03/06 22:08:51
>>56
そりゃお前定義ではオブジェクトはクロージャだって意味でしかないな。
アクター=クロージャならまだしも。
つかSICPの話をしろよ。

59 :デフォルトの名無しさん:05/03/07 00:32:44
(define (p) (p))
(define (test a b)
(if (= a 0)
0
b))
(test 0 (p))

これがapplicative-orderの評価順序なら、testに2番目の引数を渡すときに
(p)を評価せねばならず、その(p)の評価には(p)の評価が必要・・・という無限ループになることは分かりました。

これがnormal-orderだとどうなるのでしょう?
こっちもtestの2番目の引数を基本的手続きまで展開しようとするので、
無限ループ陥るのですか?testの1番目の引数が0だから2番目の引数は
評価はされない、というのは分かるのですが、式の展開はされますよね?

60 :デフォルトの名無しさん:05/03/07 03:04:21
どう展開されるかが問題でしょ

61 :デフォルトの名無しさん:05/03/07 21:53:19
昔はサイトにフルテキストのpsも置いてあった気がする・・・今はHTMLで、しかも一括ダウンロードできるファイルは置いてない。
さすがに昔は気前が良すぎたかな。

62 :デフォルトの名無しさん:05/03/10 17:43:03
pair が手続きの組み合わせで表現できるって言うの、なんかあたりまえのような不思議のような、
とにかく驚愕した

63 :デフォルトの名無しさん:05/03/13 20:34:14
>>61
wget -r しる!

64 :デフォルトの名無しさん:05/03/13 22:58:35
SICPってSchemeのマクロを解説している?

65 :デフォルトの名無しさん:05/03/14 01:09:11
してないよ。
Schemeのマクロってたぶん当時は無かったと思う。
LISPのdefmacroをSchemeで使うのも変だとか思ったんじゃないかな。


66 :デフォルトの名無しさん:05/03/14 19:10:55
ソレより何より、SICPはSchemeを使ったコンピュータ
サイエンスの入門本であって、Schemeの本じゃないから、
当時マクロがあったとしても関係ないんじゃないかな。

67 :デフォルトの名無しさん:05/03/14 19:22:23
コンパイル環境と実行環境の区別は教えてもいいと思うんだが、SICPには場所がないかも。

余談だけどC++にもtemplateの仕組みを無理矢理応用したマクロがある。
C++な人らはmetaprogrammingと呼んでいるけど。わかりにくいことこの上ない。



68 :デフォルトの名無しさん:05/03/14 20:51:18
マクロってR5RSから入ったろ?

69 :デフォルトの名無しさん:05/03/14 21:46:31
R3RS以前からありますが。

70 :デフォルトの名無しさん:05/03/15 01:25:59
r5rs 以前は仕様上で正式採用されてたわけじゃないんじゃない。
r4rs のはあくまで付録でしょ?

16 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)