LoginSignup
4
1

More than 5 years have passed since last update.

Common Lisp 学習帳 - シーケンス処理編

Last updated at Posted at 2016-05-02

何の記事?

Common Lispでシーケンス処理をするときのやり方を1ページでコンパクトにまとめたものです。
(という体の備忘録です。)
なるべくすぐに使えるようにするために、【Scheme手習い】みたいに対話形式で書いていきます。
詳細についてはこの記事よりはるかに詳しくまとめてある記事がたくさんあるのでそちらに譲ります。
サンプルコードの出力結果はSteel Bank Common Lisp(以下、SBCL)で実行したものです。

対象とする人

  • Common Lisp始めてちょっと試してみたいって人
  • これどうやってやるんだっけみたいに忘れっぽい人
  • 細かいことはいいからサンプル見せてって人

シーケンス処理編

  • Q リストを処理して新しいリストを返すには?(シーケンスをmapするには?)
  • A mapcarを使います。
mapcar.lisp
(mapcar (lambda (x) (* x 2)) '(1 2 3 4)) ; => (2 4 6 8)

  • Q リストから特定の要素のみを抜き出すもしくは排除するには?(シーケンスをfilterするには?)
  • A remove-ifもしくはremove-if-notを使います。
remove-if.lisp
(remove-if (lambda (x) (equal (mod x 2) 0)) '(1 2 3 4)) ; => (1 3)
(remove-if-not (lambda (x) (equal (mod x 2) 0)) '(1 2 3 4)) ; => (2 4)

  • Q リストを集計したり畳み込みしたりするには?(シーケンスをreduceするには?)
  • A reduceを使います。
reduce.lisp
(reduce (lambda (m x) (+ x m)) '(1 2 3 4)) ; => 10
(reduce (lambda (m x) (+ x m)) '(1 2 3 4) :initial-value 10) ; => 20

  • Q リストから重複を削除するには?
  • A remove-duplicatesを使います。
remove-duplicates.lisp
(remove-duplicates '(1 2 2 3 4 4)) ; => (1 2 3 4)

  • Q リストを逆順にするには?
  • A reverseを使います。
reverse.lisp
(reverse '(1 2 3 4)) ; => (4 3 2 1)

  • Q リストのn番目の要素がほしい。
  • Q nthを使います。
nth.lisp
(nth 2 '(1 2 3 4)) ; => 3

  • Q 二つのリストを連結したい。
  • A appendを使います。
append.lisp
(append '(1 2 3) '(4 5)) ; => (1 2 3 4 5)

  • Q 最初の要素がほしい。(firstがほしい)
  • A firstを使います。
first.lisp
(first '(1 2 3)) ; => 1

  • Q 最初の要素を除いたリストがほしい。(restがほしい)
  • A restを使います。
rest.lisp
(rest '(1 2 3)) ; => (2 3)

  • Q リストの最後の要素がほしい。(lastがほしい)
  • A lastを使いますが、リストで帰ってくる点に注意してださい。carを取るとよいでしょう。
last.lisp
(last '(1 2 3)) ; => (3)
(car (last '(1 2 3))) ; => 3

  • Q 特定の長さのリストがほしい。
  • A make-listを使います。SBCLでは:initial-elementを指定しない場合nilになります
make-list.lisp
(make-list 5) ; => (NIL NIL NIL NIL NIL)
(make-list 5 :initial-element 0) ; => (0 0 0 0 0)

※順次追加予定

4
1
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
4
1