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-02-03

L-99 (16)

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

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

P16

解答
;; Common Lisp
(defun drop (list n)
  (prog ((l list) (c n) (retlist '()))
L      (and (endp l) (return retlist))
       (multiple-value-setq (c retlist)
	 (if (= c 1)
	     (values n retlist)
	   (values (1- c) `(,@retlist ,(car l)))))
       (setq l (cdr l))
       (go L)))

;; Scheme
(define drop
  (lambda (ls n)
    (letrec ((drop1
	      (lambda (ls rls init c)
		(cond ((null? ls) 
		       rls)
		      ((= c 1)
		       (drop1 (cdr ls) rls init init))
		      (else 
		       (drop1 (cdr ls) `(,@rls ,(car ls)) init (- c 1)))))))
      (drop1 ls '() n n)))) 

意味なくmultiple-value-setqを使ってみた。