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-01-15

L-99 (7)

| 23:41 | L-99 (7) - わだばLisperになる を含むブックマーク はてなブックマーク - L-99 (7) - わだばLisperになる

L-99 7問目に挑戦 - L-99:Ninety-Nine Lisp Problems

P07

解答
;; Common Lisp
(DEFUN MY-FLATTEN (LIST)
  (PROG (L A)
	(SETQ L LIST)
	(SETQ A '())
    L	(COND ((NULL L) (RETURN A)))
	(SETQ A (APPEND A (IF (CONSP (CAR L))
			      (MY-FLATTEN (CAR L))
			    (LIST (CAR L)))))
	(SETQ L (CDR L))
	(GO L)))

;; Scheme
(define my-flatten 
  (lambda (ls)
    (letrec ((my-flatten1
	      (lambda (l r)
		(if (null? l)
		    r
		    (if (pair? (car l))
			(my-flatten1 (cdr l) (append r (my-flatten1 (car l) '())))
			(my-flatten1 (cdr l) (append r (list (car l)))))))))
      (my-flatten1 ls '()))))

flatten難しい…。手続的にしろ再帰的にしろ、どっち

も中途半端に仕上がりました。

ゲスト



トラックバック - http://cadr.g.hatena.ne.jp/g000001/20070115