・ リスト処理 いろいろ
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))
)