#:g1: リストの最後にpushする

Posted 2014-12-13 14:59:00 GMT

 リストの構造的に最後に要素を追加するということはあまり無い訳ですが、リストの最後にpushするというイディオムもまた、ぱっとしたものはないなあと思った次第。
なんとなく、nconcのことが多い気もします。

(let ((x (*:iota 10)))
  (push :foo (cdr (last x)))
  x)
;=>  (0 1 2 3 4 5 6 7 8 9 :FOO)

(let ((x (*:iota 10))) (setf (cdr (last x)) (list :foo)) x) ;=> (0 1 2 3 4 5 6 7 8 9 :FOO)

(define-modify-macro nconcf (&rest lists) nconc)

(let ((x (*:iota 10))) (nconcf x (list :foo)) x) ;=> (0 1 2 3 4 5 6 7 8 9 :FOO)

comments powered by Disqus