2019年4月1日月曜日

lisp リストから重複する要素を削除する



lisp リストから重複する要素を削除するコードをかきました。
素人なので、カッコはわかりやすいように改行してあります。
知っている関数だけ使ってやりました。



コード

(mach-meta '(w a c a c d))
(defun mach-meta (ls)
   (setq ls0 nil)
   (mach-b ls)
   (defun mach-b (ls)
      (unless (atom ls)
            (progn
               (setq flg 1)
               (setq lc-index (length (cdr ls)))
               (dolist (x (cdr ls) ls0)           
                  (format t "~%")
                  (print lc-index)
                  (print flg)
                  (print (car ls))
                  (print x)
                  (progn
                     (if (equal (car ls) x)
                        (progn
                           (print "no")
                           (setq flg (* flg 0))
                        )
                     )
                  )
                  (if (and (= flg 1) (= lc-index 1))
                        (progn
                           (print "go")
                           (setq ls0 (cons (car ls) ls0))
                           (if (atom (cdr (cdr ls)))
                              (setq ls0   (append (cdr ls) ls0))
                           )
                           (print ls0)
                        )
                  )
                  (decf lc-index)
               )
          )
      )
      (mach-b (cdr ls))
   )
)

(mach-meta '(w a c a c d))




実行結果
(D C A W)

0 件のコメント:

コメントを投稿

About

参加ユーザー

連絡フォーム

名前

メール *

メッセージ *

ページ

Featured Posts