0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AutoLISP リスト操作関数の使い方

Posted at

リスト操作関数リファレンス(公式ヘルプ)
AutoLISP リスト操作いろいろ

文字列のリストを文字コード順にソート acad_strlsort

(acad_strlsort '("b" "d" "a" "e" "c"))
;; -> ("a" "b" "c" "d" "e")
(acad_strlsort '("3" "4" "1" "5" "2"))
;; -> ("1" "2" "3" "4" "5")
(acad_strlsort '("う" "お" "あ" "え" "い"))
;; -> ("あ" "い" "う" "え" "お")

複数のリストを結合する append

(append '("abc" "def") '("ghi" "jkl"))
;; -> ("abc" "def" "ghi" "jkl")
(append '(1 2 3) '("abc") '(4.5 5.5 6.5))
;; -> (1 2 3 "abc" 4.5 5.5 6.5)

連想リストの要素を検索する assoc

(setq lst '((1 "aaa")(2 "bbb")(3 "ccc")(4 "ddd")(5 "eee")))
(assoc 1 lst)
;; -> (1 "aaa")
(assoc 3 lst)
;; -> (3 "ccc")

(setq lst2 '((Aaa 111)(Bbb 222)(Ccc 333)(Ddd 444)(Eee 555)))
(assoc 'Aaa lst2)
;; -> (AAA 111)
(assoc 3 lst)
;; -> (EEE 555)

リストの先頭の要素を取得する car

(car '(1 2 3 4 5))
;; -> 1

リストの先頭以外を取得する cdr

(cdr '(1 2 3 4 5))
;; -> (2 3 4 5)

リストを作成する cons

(cons "a" '("b" "c" "d" "e"))
;; -> ("a" "b" "c" "d" "e")
(cons '("a" "b") '("c" "d" "e"))
;; -> (("a" "b") "c" "d" "e")
(cons 1 '(2 3 4 5))
;; -> (1 2 3 4 5)
(cons '(1 2) '(3 4 5))
;; -> ((1 2) 3 4 5)

;;; ドット リストを作成
(cons 1 "aaa")
;; -> (1 . "aaa")
(cons 'a 123.45)
;; -> (A . 123.45)

リストのすべての要素に対して処理をする foreach

(setq a 0)
(foreach x '(1 2 3 4 5)
    (setq a (+ a x))
)
;; -> a = 15

(setq b "foreach-")
(foreach s '("a" "b" "c" "d" "e")
    (setq b (strcat b s))
)
;; -> "foreach-abcde"

リストの最後の要素を取得する last

(last '(1 2 3 4 5))
;; -> 5
(last '("a" "b" "c" "d" "e"))
;; -> "e"

リストの要素数を数える length

(length '(1 2 3 4 5))
;; -> 5
(length '("a" "b" "c"))
;; -> 3

リストを作成する list

(list "a" "b" "c")
;; -> ("a" "b" "c")
(list 'a 'b 'c)
;; -> (A B C)

指定された項目がリストかどうかを調べる listp

(listp '(1 2 3 4 5))
;; -> T
(listp '("a" "b" "c"))
;; -> T
(listp 1)
;; -> nil
(listp "aaa")
;; -> nil

指定されたリストの各要素を引数として関数を実行する mapcar

(mapcar '+ '(1 2 3 4 5) '(10 20 30 40 50))
;; -> (11 22 33 44 55
(mapcar 'strcat '("a" "b" "c" "d" "e") '("-A" "-B" "-C" "-D" "-E"))
;; -> ("a-A" "b-B" "c-C" "d-D" "e-E")
(mapcar 'list '(1 2 3 4 5) '("a" "b" "c" "d" "e"))
;; -> ((1 "a") (2 "b") (3 "c") (4 "d") (5 "e"))
(mapcar 'cons '(1 2 3 4 5) '("a" "b" "c" "d" "e"))
;; -> ((1 . "a") (2 . "b") (3 . "c") (4 . "d") (5 . "e"))

指定された式がリスト内に存在するかどうかを検索する member

(member "c" '("a" "b" "c" "d" "e"))
;; -> ("c" "d" "e")
(member "f" '("a" "b" "c" "d" "e"))
;; -> nil
(member 2 '(1 2 3 4 5))
;; -> (2 3 4 5)
(member (+ 2 2) '(1 2 3 4 5))
;; -> (4 5)

リストの n 番目の要素を取得する nth

(nth 2 '(1 2 3 4 5))
;; -> 3
(nth 0 '(1 2 3 4 5))
;; -> 1

リストの要素を反転する reverse

(reverse '(1 2 3 4 5))
;; -> (5 4 3 2 1)
(reverse '("a" "b" "c" "d" "e"))
;; -> ("e" "d" "c" "b" "a")

リストの要素を入れ替える subst

;;; 1 を 9 に
(subst 9 1  '(1 2 3 4 5 1))
;; -> (9 2 3 4 5 9)

;;; "a" を "z" に
(subst "z" "a"  '("a" "b" "c" "d" "e" "a"))
;; -> ("z" "b" "c" "d" "e" "z")

リストが nil かどうかを調べる vl-consp

(vl-consp '(1 2 3 4 5))
;; -> T
(vl-consp ())
;; -> nil

すべての要素の組み合わせに対して真かどうか調べる vl-every

(vl-every '< '(1 2 3 4 5) '(2 3 4 5 6))
;; -> T
(vl-every '< '(1 2 3 4 5) '(2 2 4 5 6))
;; -> nil

リストを作成 vl-list*

(vl-list* 1 2 3 4 5)
;; -> (1 2 3 4 . 5)
(vl-list* "aaa")
;; -> "aaa"
(vl-list* 1 "aaa")
;; -> (1 . "aaa")
(vl-list* '(1 2) '(3 4 5))
;; -> ((1 2) 3 4 5)
(vl-list* 1 2 '(3 4 5))
;; -> (1 2 3 4 5)
(vl-list* '(1 2) '(3 4) '(5 6))
;; -> ((1 2) (3 4) 5 6)

文字コードのリストから文字列を作成 vl-list->string

(vl-list->string (list (ascii "a") (ascii "b") (ascii "c")))
;; -> "abc"

本来のリストの長さを算出 vl-list-length

(vl-list-length '(1 2 3 4 5))
;; -> 5
(vl-list-length '("a" "b" "c"))
;; -> 3
(vl-list-length (cons 1 "a"))
;; -> nil
(vl-list-length nil)
;; -> 0

リストの要素の 1つでも結果が真かどうかを調べる vl-member-if

(vl-member-if 'numberp '(1 2 3 4 5))
;; -> (1 2 3 4 5)
(vl-member-if 'numberp '(1 2 3 4 5 "a"))
;; -> (1 2 3 4 5 "a")
(vl-member-if 'numberp '("a" "b" "c" "d" "e"))
;; -> nil

リストの要素の 1 つでも結果が nil かどうかを調べる vl-member-if-not

(vl-member-if-not 'numberp '(1 2 3 4 5))
;; -> nil
(vl-member-if-not 'numberp '(1 2 3 4 5 "a"))
;; -> ("a")
(vl-member-if-not 'numberp '("a" "b" "c" "d" "e"))
;; -> ("a" "b" "c" "d" "e")

指定された要素のリスト内のインデックスを返す vl-position

(vl-position 3 '(1 2 3 4 5))
;; -> 2
(vl-position "a" '("a" "b" "c" "d" "e"))
;; -> 0
(vl-position "え" '("あ" "い" "う" "え" "お"))
;; -> 3

リストから要素を除去する vl-remove

(vl-remove 3 '(1 2 3 4 5))
;; -> (1 2 4 5)
(vl-remove "a" '("a" "b" "c" "d" "e"))
;; -> ("b" "c" "d" "e")
(vl-remove "え" '("あ" "い" "う" "え" "お"))
;; -> ("あ" "い" "う" "お")

リストの要素の中で、T になったの要素を除去したリストを取得する vl-remove-if

(vl-remove-if 'numberp '(1 2 3 4 5))
;; -> nil
(vl-remove-if 'numberp '(1 2 3 4 5 "a"))
;; -> ("a")
(vl-remove-if 'numberp '("a" "b" "c" "d" "e"))
;; -> ("a" "b" "c" "d" "e")

リストの要素の中で、nil になったの要素を除去したリストを取得する vl-remove-if-not

(vl-remove-if-not 'numberp '(1 2 3 4 5))
;; -> (1 2 3 4 5)
(vl-remove-if-not 'numberp '(1 2 3 4 5 "a"))
;; -> (1 2 3 4 5)
(vl-remove-if-not 'numberp '("a" "b" "c" "d" "e"))
;; -> nil

1 つの要素の組み合わせに対して T かどうか調べる vl-some

1つでも T があれば T。

(vl-some '< '(1 2 3 4 5) '(2 3 4 5 6))
;; -> T
(vl-some '< '(1 2 3 4 5) '(2 2 4 5 6))
;; -> T
(vl-some '< '(1 2 3 4 5) '(0 1 2 3 4))

比較関数にしたがってリスト内の要素をソートする vl-sort

(vl-sort '(1 2 3 4 5) '>)
;; -> (5 4 3 2 1)
(vl-sort '("a" "b" "c" "d" "e") '>)
;; -> ("e" "d" "c" "b" "a")

比較関数にしたがってソートされた、インデックス番号のリストを取得する vl-sort-i

(vl-sort-i '(1 2 3 4 5) '>)
;; -> (4 3 2 1 0)
(vl-sort-i '("a" "b" "c" "d" "e") '>)
;; -> (4 3 2 1 0)

文字列を文字コードのリストに変換 vl-string->list

(vl-string->list "abcde")
;; -> (97 98 99 100 101)
(vl-string->list "12345")
;; -> (49 50 51 52 53)
(vl-string->list "あいうえお")
;; -> (130 160 130 162 130 164 130 166 130 168)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?