計算機プログラムの構造と解釈[14]

sicp.info 導入

nanasi さんに SICP が info 形式で配布されているとの情報を貰ったので,
さっそく導入してみた.

neilvandyke.org - SICP in Texinfo Format
http://www.neilvandyke.org/sicp-texi/

まあ, 当然内容は, 英語だけど,
買うと 5000 円以上する本の内容がそのまま無料で手に入るとは・・・.
こういうところで, 英語に強い人は得だなあと思うよ.



sicp.info.gz を落としてきたら, 適当なディレクトリに配置.
Emacs から使えるようにした.

  1. dired 使って, sicp.info を sicp.info にする.
  2. .emacs を確認.
  3. /usr/local/info/dir に設定を追加.
  4. Emacs のブックマークに SICP の info を追加.

C-h i で表示される一覧に info ファイルを追加するには,
.emacs に Info-default-directory-list へ info ファイルを置いたディレクトリを
追加すれば, いいもんだと思ってたけど, 全然違った.
これで, 妙な時間を食った.
前に Gauche の info を追加したはずなのに, 完全に忘れてた.
C-h i で表示される一覧に追加するには, /usr/local/info/dir に設定を追加する.
今の内容は, こんな感じ.
追加したのは, 最終行の * SICP ... ってやつ.

This is the file .../info/dir, which contains the
topmost node of the Info hierarchy, called (dir)Top.
The first time you invoke Info you start off looking at this node.

File: dir,      Node: Top       This is the top of the INFO tree

  This (the Directory node) gives a menu of major topics.
  Typing "q" exits, "?" lists all Info commands, "d" returns here,
  "h" gives a primer for first-timers,
  "mEmacs<Return>" visits the Emacs manual, etc.

  In Emacs, you can click mouse button 2 on a menu item or cross reference
  to select it.

* Menu:

The Algorithmic Language Scheme
* SLIB: (slib).         Scheme Library
* Gauche (ja): (gauche-refj.info).  An R5RS Scheme implementation.
* SICP : (sicp.info). Structure and Interpretation of Computer Programs.

sudo emacsclient /usr/... でこのファイルを編集できなかったから,
久々に vim を使った.
Emacs を sudo つけて起動しなおすのも面倒だし.
いやー, vim の操作ちょっと忘れてたや.
一瞬, どうやって終了するんだっけと考えてしまった.

2.1.2


びっくりするぐらい時間かかるw
悲しいぐらい英語力がねえ.

問題 2.2

ケアレスミスで時間かかりまくった.
y-point の引数で y としてるのに, (cdr x) とかやってた.
こういうミスはよくないなあ.

(define (make-segment st en) (cons st en))
(define (start-segment seg) (car seg))
(define (end-segment seg) (cdr seg))

(define (make-point x y) (cons x y))
(define (x-point x) (car x))
(define (y-point y) (cdr y))

(define (midpoint-segment segment)
  (let ((start (start-segment segment))
        (end   (end-segment segment)))
    (make-point
     (/ (+ (x-point start) (x-point end) 2))
     (/ (+ (y-point start) (y-point end) 2)))))

(define (print-point p)
  (newline)
  (display "(")
  (display (x-point p))
  (display ",")
  (display (y-point p))
  (display ")"))

実行結果.

gosh> (define xp (make-point 1 2))
xp
gosh> (define yp (make-point 3 4))
yp
gosh> (define line (make-segment xp yp))
line
gosh> line
((1 . 2) 3 . 4)
gosh> (midpoint-segment line)
(1/6 . 1/8)
gosh> (print-point (midpoint-segment line))

(1/6,1/8)#<undef>

いやー

倍以上時間かかるw
慣れるまでがんばろう.
英語は, しゃべれなくて, 書けなくてもいいから, せめて読めるようになりたいねえ.
# ひっくい目標だなあ.
前もせめて読めるようになろうと,
印刷してきた 100 ページぐらいの NASM のマニュアルを1日2ページずつ訳していったしねえ.
一応それは最後までやった. だから, 今回もゆっくりと途中で挫折しないようやってこう.
当時よりも訳すためのツールもそろってるわけだし.
ちなみにその訳した NASM のマニュアルの出来はヒドイもんだった.
後で読んでも, とても理解できんw



問題 2.3 もやろうとしたけど, 駄目だ. 眠い.
また明日〜.

更新時刻

2007年, 4月7日, 2:35