Hatena::Groupcsnagoya-sicp

Gemmaの日記

2008-10-29

lim[n→∞]√2↑↑n=2

03:38

athosの日記の補足です。初等的な証明。

  1 = 0.9999...の証明は、
  a = 0.999...
10a = 9.999...
 9a = 9
  a = 1
        2 = √2^√2^√2... の証明は、
        a = √2^√2^√2...
        a = √2^a
    log a = a log√2
1/a log a = 1/2 log 2 
        a = 2.

(追記)この証明は間違っていました。高校2年のときにこれを教えてくれたT君、見ていたら連絡ください。

プログラミングと禅

23:10

Wikipedia:禅

自分みたいなひよっこが、プログラミングと禅だなんてケレン味たっぷりですが。

ひたすらプログラミングせよ

ハックは臨機応変であり、あらゆる道にハッカー精神が含まれていると考えるので、プログラミング以外のことはしてはならないということはないが、このようなことは初心者には理解が及ばず、そのために初心者向けの方便としてただひたすらにプログラミングすることがハックの極意であるということが言われる。

ひとまず思考・議論・学習を止めよと教えても、なぜ止めねばならないかについて思考・議論・学習を始めてしまうような思考癖のある修行者にとって、ただひたすらプログラミングせよは至難の方法となる。そのような修行者は、いかなる経典を学ぶとも、悟りというものの共感が得られないために、想像をふくらませて解釈しようとする。無理な想像は妄想となって理解に歪みを生じ、自ら生み出した曲解に妨げられてますます悟りから遠のくという事態は、昔から多くの師家を悩ませてきた。

公案

心がけがよくなく、このままではまちがった方向に進むおそれのある修行者に対して、師家が薬のような意味合いで修行者に授ける。

上級者はbeginをどう思っている?

22:35

小学生のとき、「授業中は先生の目をよく見ていなさい」と言われたことがあります。

その本当の意味は、集中して授業を受けなさいということですが、

小学生は"集中するってどういうこと?"なので、"目を見ろ"と。

そういう意味で、「beginやlet*をなるべく使うな」と言います。

本当の意味は、副作用をなるべく使わない関数型言語のスタイルを身につけようということです。

手続き型言語に慣れた人は、"代入を使って何が悪いの?"と、道に迷うことがあります。


----

Lispの妙諦は、

ことにあります。

Pascalの三角形

22:33

LispはLIST Processingというくらいで、

Lisp脳は、まずリストを作る。

(define (pascal n)
  (define (loop l n)
    (if (zero? n)
      l
      (loop `(1 ,@(map + l (cdr l)) 1)
	    (- n 1))))
  (loop '(1) n))

(pascal 0)

= (1)

(pascal 1)

= (1 1)

(pascal 4)

= (1 4 6 4 1)

(pascal 5)

= (1 5 10 10 5 1)

(map + l (cdr l))

を、ぱっとひらめくのは難しいのでドンマイ。

リストを作ってから、プリントの仕方を考える。

(use srfi-1)
(define (print-triangle n)
  (for-each (lambda (x)
	      (print (make-string (- n (length x)) #\space)
		     (string-join (map x->string x) " ")))
	    (map pascal (iota n))))
(print-triangle 6)
     1
    1 1
   1 2 1
  1 3 3 1
 1 4 6 4 1
1 5 10 10 5 1

gabuchangabuchan 2008/10/30 02:32 思考癖のある修行者とはまさにですね。公案ありがとうございます。

athosathos 2008/10/30 12:10 >初等的な証明
おー、と思っていたんですが、1/a log a = 1/2 log 2 から a = 2 とは言えなさそうです。a = 4もありますし。

ゲスト



トラックバック - http://csnagoya-sicp.g.hatena.ne.jp/Gemma/20081029