Subst

提供:GizmoLabs - だいたい CAD LISP なサイト
2011年11月16日 (水) 15:44時点におけるGizmon (トーク | 投稿記録)による版
構文
(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 'b sample) 
 (A B (C D) B)

 (subst 'qq '(c d) sample) 
 (A B QQ B)

 (subst '(qq rr) 'QQ sample) 
 (A B (QQ RR) B)

 (subst 'b '(qq rr) sample) 
 (A B B B)
subst 関数を assoc 関数と組み合わせて使用すると、連想リスト内の 1 つのキーに関連する値を、簡単に置き換えることができる。次に ((FIRST "一郎") (MID "花子") (LAST "太郎")) のリストから((FIRST "イチロー") (MID "花子") (LAST "太郎")) に置き換える例を示す。
(setq who '((FIRST "一郎") (MID "花子") (LAST "太郎"))) ; 変数 who に連想リストを代入。
> ((FIRST "一郎") (MID "花子") (LAST "太郎"))

(setq old (assoc 'first who) 
      new '(first "イチロー"))                          ; 次に、変数 old に(FIRST "太郎")を、変数 new に(FIRST "イチロー")を代入。

(subst new old who)                                     ; 最後に、連想リストの最初の項目の値を置き換え。
> ((FIRST "イチロー") (MID "花子") (LAST "太郎"))