[Mew-dist 06055] Re: uniqfy

Murata Takashi Takashi.Murata at example.com
1998年 8月 20日 (木) 22:01:53 JST


From: Kazu Yamamoto (山本和彦) <kazu at example.com>
Subject: [Mew-dist 06028] uniqfy
Date: Thu, 20 Aug 1998 15:21:45 +0900

> 本日開催された itojun 先生による Lisp 教室の演習問題として、よい子の
> (「禁断の」ともいう) mew-uniq-list を作ってみましたのでお試し下さい。
> ないとは思いますが、副作用バリバリかもしれません。

(defmacro mew-uniq-list (lst)
  (` (let ((tmp (, lst)))
       (while tmp (setq tmp (delete (car tmp) (cdr tmp))))
       (, lst))))

  なんか面白いマクロだなぁと感心して、テストしてみたのですが、うまく
動作していないと思うのですが、大丈夫でしょうか?

(mew-uniq-list '(a a b a b b c b))  →  (a a b b b c)

  同じメンバが並ぶと排除出来ないようです。
  以下のようにすれば思ったようには動くのですが、もう少し簡単に
ならないかな…これなら関数にした方がいいかも。

(defmacro mew-uniq-list (lst)
  (` (let ((tmp (, lst)))
       (while tmp (rplacd tmp (delete (car tmp) (cdr tmp)))
              (setq tmp (cdr tmp)))
       (, lst))))

┌───────────── 村田 隆 / Takashi.Murata at example.com ┐
└ 日本システム技術(株) 技術部  Tel:03-3503-8736  Fax:03-3580-7806 ┘



Mew-dist メーリングリストの案内