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

L-99 (12)

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

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

P12

解答
;;; Common Lisp
(defun decode (list)
  (labels ((expand (code)
	     (destructuring-bind (n item)
		 code
	       (if (= n 1)
		   `(,item)
		   (cons item (expand `(,(1- n) ,item)))))))
    (if (null list)
	'()
	(append (expand (car list)) (decode (cdr list))))))

;;; Scheme
(define decode
  (lambda (ls)
    (letrec ((expand
	      (lambda (code)
		(let ((n (car code))
		      (item (cadr code)))
		  (if (= n 1)
		      `(,item)
		      `(,item ,@(expand `(,(- n 1) ,item))))))))
	    (if (null? ls)
		'()
		`(,@(expand (car ls)) ,@(decode (cdr ls)))))))

ALUのLisp Programming Styleを眺めつつ

CLではdestructuring-bindを使ってみたりした。