・ リスト処理 いろいろ
Jo_lst_set.lsp としてお蔵入りツールにもアップしときました
;***********************************************************************; ;リスト処理関数セット ; ; 2004/06/29 by Kamijo ; ;***********************************************************************; ;***********************************************************************; ;リストの最後を除いて返す( (last)の反対 ) ; ;***********************************************************************; (defun Jof_lstdel_last ( lst ;リスト; ) (reverse (cdr (reverse lst))) ) ;***********************************************************************; ;リストの要素を指定して削除 ; ; 削除したい要素のリストで元リストから要素を削除 ; ;***********************************************************************; (defun Jof_lstdel_lst ( lst_org ;元リスト; lst_del ;削除したい要素のリスト; / lst_ret) (foreach n lst_org (if (not (member n lst_del)) (setq lst_ret (cons n lst_ret)))) (reverse lst_ret) ) ;***********************************************************************; ;削除したいグループコードのリストでエンティティーデータから要素を削除 ; ;***********************************************************************; (defun Jof_lstdel_ed ( ed ;エンティティーデータのリスト; lst ;削除したいグループコードのリスト; / ret ) (foreach n ed (if (not (member (car n) lst)) (setq ret (cons n ret)))) (reverse ret) ) ;***********************************************************************; ;リストから nil を削除 ; ;***********************************************************************; (defun Jof_lstdel_nil ( lst ;元リスト; / lst_ret) (foreach n lst (if n (setq lst_ret (cons n lst_ret)))) (reverse lst_ret) ) ;***********************************************************************; ;リストの要素番号で指定して削除 ; ;***********************************************************************; (defun Jof_lstdel_nth ( lst ;元リスト; n / lst_ret i) (setq i 0) (repeat (length lst) (if (/= n i) (setq lst_ret (cons (nth i lst) lst_ret))) (setq i (1+ i)) ) (reverse lst_ret) ) ;***********************************************************************; ;リストから重複した要素を削除 ; ;***********************************************************************; (defun Jof_lstdel_same ( lst ;元リスト; / lst_ret ) (foreach n lst (if (not (member n lst_ret)) (setq lst_ret (cons n lst_ret)))) (reverse lst_ret) ) ;***********************************************************************; ;リストの要素を指定して要素番号を取得 ; ; 同じ要素が複数含まれている場合は、最初に現れる要素番号を返す ; ; 要素がなければ nil を返す ; ;***********************************************************************; (defun Jof_lstret_nth ( lst ;元リスト; el ;要素; / ) (if (member el lst) (- (length lst) (length (member el lst))) nil) ) ;***********************************************************************; ;リストのn番目からx個の要素をリストで返す ; ;***********************************************************************; (defun Jof_lstmid( lst ;リスト; n ;n番目から 先頭は0番目; x ;x個; / len ret) (setq len (length lst)) (repeat (min n len) (setq lst (cdr lst)) ) (setq len (length lst)) (repeat (min x len) (setq ret (cons (car lst) ret)) (setq lst (cdr lst)) ) (reverse ret) ) ;***********************************************************************; ;リストのn番目からx個の要素を削除して返す ; ;***********************************************************************; (defun Jof_lstmid_del( lst ;リスト; n ;n番目から 先頭は0番目; x ;x個; / len ret) (setq len (length lst)) (repeat (min n len) (setq ret (cons (car lst) ret)) (setq lst (cdr lst)) ) (setq len (length lst)) (repeat (min x len) (setq lst (cdr lst)) ) (setq len (length lst)) (repeat len (setq ret (cons (car lst) ret)) (setq lst (cdr lst)) ) (reverse ret) ) ;***********************************************************************; ;リストをn番目より前と以後にわけて返す ; ;***********************************************************************; (defun Jof_lst_div( lst ;リスト; n ;n番目 先頭は0番目; / len ret1 ret2 ) (setq len (length lst)) (repeat (min n len) (setq ret1 (cons (car lst) ret1)) (setq lst (cdr lst)) ) (setq len (length lst)) (repeat len (setq ret2 (cons (car lst) ret2)) (setq lst (cdr lst)) ) (list (reverse ret1) (reverse ret2)) )