Hatena::Groupcsnagoya-sicp

Gemmaの日記

2008-10-29

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

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

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