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-09

L-99 (70C)

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

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

引き続き、解けそうな問題ということで、P70Cの解答を

作成。しかし、flow pattern (o,i)って何物だ

P70C

解答
;; Common Lisp
(defun nnodes (tree)
  (and (is-multiway-tree tree)
       (let ((rest-tree (cdr tree)))
	 (apply #'+ 1
		(if (null rest-tree)
		    '(0)
		    (mapcar #'nnodes rest-tree))))))

;; Scheme
(define nnodes
  (lambda (tree)
    (and (is-multiway-tree tree)
	 (let ((rest-tree (cdr tree)))
	   (apply + 1
		  (if (null? rest-tree)
		      '(0)
		      (map nnodes rest-tree)))))))

; 前のis-multiway-treeの定義では、'()を与えられた
; 場合にエラーとなるので、carからGauche拡張ありの
; list-refへ変更
(define is-multiway-tree
  (lambda (obj)
    (let/cc exit
      (and (not (list? (list-ref obj 0 '())))
	   (dolist (o (cdr obj) #t)
		   (or (and (list? o)
			    (is-multiway-tree o))
		       (exit #f)))))))