Lisp Scheme Part17
■ このスレッドは過去ログ倉庫に格納されています
0606デフォルトの名無しさん
2007/06/20(水) 20:12:56まず下のような感じで書いたのですが、これだと、nが0の場合にエラーになります。
(define (remove-at! ls n)
(let loop((prev '()) (rest ls) (count n))
(if (zero? count)
(begin
(set-cdr! prev (cdr rest))
(car rest))
(loop rest (cdr rest) (- count 1)))))
それで、nが0の場合は別に処理を入れてみたのですが、破壊的操作で、リストの先頭を削除するのがどうしてもわかりません。
どう書けばいいでしょうか?
(define (remove-at! ls n)
(cond
((null? ls) '())
((zero? n)
(let
((tmp (car ls)))
(set-cdr! ls (cdr ls)) ;; ここがダメ
tmp))
(else
(let loop((prev '()) (rest ls) (count n))
(if (zero? count)
(begin
(set-cdr! prev (cdr rest))
(car rest))
(loop rest (cdr rest) (- count 1)))))))
■ このスレッドは過去ログ倉庫に格納されています