「Subst」の版間の差分

提供:GizmoLabs - だいたい CAD LISP なサイト
(ページの作成: ; 構文 : (subst ''newitem'' ''olditem'' ''lst'') ; 機能 : リストで古い項目を検索し、古い項目があるたびに新しい項目で置き換えたリストの…)
(相違点なし)

2009年10月21日 (水) 13:11時点における版

構文
(subst newitem olditem lst)


機能
リストで古い項目を検索し、古い項目があるたびに新しい項目で置き換えたリストのコピーを返す。
引数
  • newitem : アトムまたはリスト。
  • olditem : アトムまたはリスト。
  • lst : リスト。


戻り値
すべての olditem を newitem に置き換えたリスト。
lst 引数に olditem が存在しない場合、subst 関数は lst を変更せずに返す。


サンプル
(subst '"a" '"b" '("a" "b" "c"))
("a" "a" "c")
---
(setq sample '(a b (c d) b))
(A B (C D) B)
(subst 'qq 'b sample)
(A QQ (C D) QQ)
(subst 'qq 'z sample)
(A B (C D) B)
(subst 'qq '(c d) sample)
(A B QQ B)
(subst '(qq rr) '(c d) sample)
(A B (QQ RR) B)
(subst '(qq rr) 'z sample)
(A B (C D) B)
---
subst 関数を assoc 関数と組み合わせて使用すると、連想リスト内の 1 つのキーに関連する値を、簡単に置き換えることができる。次に ((FIRST "一郎") (MID "花子") (LAST "太郎")) のリストから((FIRST "イチロー") (MID "花子") (LAST "太郎")) に置き換える例を示す。
変数 who に連想リストを代入。
(setq who '((FIRST "一郎") (MID "花子") (LAST "太郎")))
((FIRST "一郎") (MID "花子") (LAST "太郎"))
次に、変数 old に(FIRST "太郎")を、変数 new に(FIRST "イチロー")を代入。
(setq old (assoc 'first who) new '(first "イチロー"))
(FIRST "イチロー")
最後に、連想リストの最初の項目の値を置き換え。
(subst new old who)
((FIRST "イチロー") (MID "花子") (LAST "太郎"))