放射状

勉強のメモ。

SICP一日目~ 問題 1.4まで

部下の人が「上司なんだからちゃんとやってくれないと」とか何かと煽ってきてビキビキするので、艦これのデイリーこなしながらぷよクエのとことんやりながらVisualStudioインストールするためにCドライブの空き容量を確保しながら更新します。部下の上司いびりはよくないと思いますね。あらゆる上司がブチャラティみたいだと思うなよ。

参照先

本を買ってもいいけれど、ここに訳者の方が全文掲載して下さっています。

問題を解く

要所要所に問題があるので、その答えをここに書いていく感じで。今回はこのあたり

問題 1.1

問題をじっと眺めて、頭の中に結果を思い描き、あとは実際にコードを打って確認するだけなのでここに書く必要はないと確信。

問題 1.2
(/ (+ 5 (+ 4 (- 2 (- 3 (+ 6 (/ 4 5))))))
   (* 3 (* (- 6 2) (- 2 7)))
   )

慣れると前置記法のほうが分かりやすいですよね。

問題 1.3
(define (square x) (* x x))
(define (bigger a b) (if (< a b) b a))
(define (mokuteki a b c) 
  (+ 
    (square (bigger a b)) 
    (square (bigger b c))
    )
  )
(mokuteki 1 2 3)

こんなに手続き型っぽくていいのか。インデントはこれでかっこいいのか。悩みは尽きない。

問題 1.4

演算子が合成式である組合せ」 …表現が難しいです先生。原典をあたりたいところですがそろそろ眠いのですすめます。
とりあえず実際に動かして演算子の挙動を眺めてみる。

(define (a-plus-abs-b a b)
  ((if (> b 0) + -) a b))
;gosh> 6
(a-plus-abs-b 1 -5)

ifの結果で返された演算子がそのままa bに適用されるのですね。かっこいい。(こんなに頭の悪そうな回答でいいのか)

ここまでやってみて

sublime text 3にはもしかしてlispを整形してくれるbeautify的な何かが存在しない? というか、もしかしてlispは改行はある程度個人に任せる的文化?
謎は尽きない。