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

L-99 (18)

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

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

P18

解答
;; Common Lisp
(defun slice (list start end)
  (do ((l list (cdr l))
       (c 1 (1+ c))
       (retlist '() (if (<= start c end)
			`(,@retlist ,(car l))
			retlist)))
      ((or (endp l) (> c end)) retlist)))

;; Scheme
(define slice 
  (lambda (ls s e)
    (let slice1 ((l ls) (c 1) (rl '()))
      (cond ((or (null? l) (> c e)) rl)
	    ((<= s c e) 
	     (slice1 (cdr l) (+ c 1) `(,@rl ,(car l))))
	    (else
	     (slice1 (cdr l) (+ c 1) rl))))))