Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2007-04-08

L-99 (70B)

| 22:56 | L-99 (70B) - わだばLisperになる を含むブックマーク はてなブックマーク - L-99 (70B) - わだばLisperになる

L-99 P70Bに挑戦 - L-99:Ninety-Nine Lisp Problems

P55に挑戦していたけれど、12時間考えても全然歯が立

たない!

問題の概要はといえば、

1、与えられた数の葉っぱを二分木の左右に均等に振り

分ける (差は右と左で葉っぱ一枚以内)

2、1が成り立つすべての組み合わせを出力せよ。

(バックトラックを使って)

うぁぁぁぁわかんねー ヽ(`Д´)ノ=3

ということで、失意の中、解けそうな問題ということで、

いきなりP70Bの回答を作成

P70B

解答
;; Common Lisp
(defun is-multiway-tree (obj)
  (and (not (listp (car obj)))
       (dolist (o (cdr obj) t)
	 (or (and (listp o)
		  (is-multiway-tree o))
	     (return-from is-multiway-tree nil)))))

;; Scheme
(define is-multiway-tree
  (lambda (obj)
    (let/cc exit
      (and (not (list? (car obj)))
	   (dolist (o (cdr obj) #t)
		   (or (and (list? o)
			    (is-multiway-tree o))
		       (exit #f)))))))