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

L-99 (70)

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

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

引き続き、70番台の問題に挑戦。70番台は、多分岐ツ

リーの問題。

今回の回答は、リスト構造を解析しないで、与えられた

文字列を無理矢理リスト表現に変換するという反則攻撃。

文字列の形式が正しくないとエラーになるので、例外処

理もしてみた。nilを返すだけだけども。

P70

解答
;; Common Lisp
(defun node-string->tree (string)
  (values 
   (handler-case 
       (read-from-string
	(coerce 
	 (let ((retlst '()))
	   (mapc #'(lambda (c)
		     (setq retlst (if (char= #\^ c)
				      `(,@retlst #\))
				      `(,@retlst #\( ,c))))
		 (coerce string 'list))
	   retlst)
	 'string))
     (end-of-file nil nil))))

;; Scheme (Gauche)
(define node-string->tree 
  (lambda (str)
    (guard (err ((<read-error> err) #f))
	   (read-from-string
	    (list->string
	     (let ((retlst '()))
	       (for-each (lambda (c)
			   (set! retlst (if (char=? #\^ c)
					    `(,@retlst #\))
					    `(,@retlst #\( ,c))))
			 (string->list str))
	       retlst))))))

ゲスト



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