「Subst」の版間の差分

提供:GizmoLabs - だいたい CAD LISP なサイト
(ページの作成: ; 構文 : (subst ''newitem'' ''olditem'' ''lst'') ; 機能 : リストで古い項目を検索し、古い項目があるたびに新しい項目で置き換えたリストの…)
 
編集の要約なし
 
(同じ利用者による、間の4版が非表示)
1行目: 1行目:
{{AutoLISP}}
; 構文
; 構文
: (subst ''newitem'' ''olditem'' ''lst'')
: (subst ''newitem'' ''olditem'' ''lst'')
5行目: 6行目:
; 機能
; 機能
: リストで古い項目を検索し、古い項目があるたびに新しい項目で置き換えたリストのコピーを返す。
: リストで古い項目を検索し、古い項目があるたびに新しい項目で置き換えたリストのコピーを返す。


; 引数
; 引数
18行目: 20行目:


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


-----
関連事項
* [[assoc]]


[[Category:AutoLISP]]
[[Category:AutoLISP]]

2020年9月1日 (火) 08:36時点における最新版

構文
(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 "太郎")) に置き換える例を示す。
; 変数 who に連想リストを代入。
(setq who '((FIRST "一郎") (MID "花子") (LAST "太郎"))) 
> ((FIRST "一郎") (MID "花子") (LAST "太郎"))

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

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

; コピーなので元のリストは変化なし
!who
> ((FIRST "イチロー") (MID "花子") (LAST "太郎"))

(setq who (subst new old who)
> ((FIRST "イチロー") (MID "花子") (LAST "太郎"))

!who
((FIRST "イチロー") (MID "花子") (LAST "太郎"))



関連事項