レシピ::CommonLisp

A

apply -> 関数引数::CommonLisp

append

リストの連結。
> (append '(a b) '(c d)
(a b c d)
イメージ
(a b) (c d)
    ^ ^
この2つのカッコを取るかんじ。

assoc

Aリスト(association list,連想リスト)から
指定したキーをもつペアを呼び出す。
普通のリストでも動く。
(assoc key alist)

  • 普通のリスト
CL-USER> (assoc 'a '((a b) (c d)))
(A B)
CL-USER> (assoc 'b '((a b) (c d)))
NIL
CL-USER> (assoc 'c '((a b) (c d)))
(C D)

  • Aリスト
CL-USER> (assoc 'a '((a . b) (c . d)))
(A . B)
CL-USER> (assoc 'b '((a . b) (c . d)))
NIL
CL-USER> (assoc 'c '((a . b) (c . d)))
(C . D)

B

C

D

defstruct関係

3つの要素を持った構造体HOGEを定義。
(defstruct HOGE elm1 elm2 elm3)
HOGEを作る
(make-HOGE elm1: foo elm2: bar elm3: woo)
各要素1にアクセス
(HOGE-elm1 aHOGE)

dotimes

指定された回数繰り返しをする。
(dotimes (変数 繰り返し回数 返り値)
  式1 ... 式n)

E

F

format

少なくとも2つの引数を取る。

第1引数: 出力先のストリーム

t 標準入出力

第2引数: フォーマット文字列の指定

文字列そのものを表すリテラルと,
3つ目以降の引数をどのように解釈するかを
format関数に伝えるための指示子の両方を含めることができる。
この指示子の先頭には「~」がつく。(printfでいう%)

~a

エステティック(aesthetic: 美的な)指示子。
引数を1つ消費して,それを人間が読みやすい形式で表示してほしい という指示。
キーワードは先頭の「:」がない形で,
文字列は「" "」がない形に。

CL-USER> (format t "~a" "Dixie Chicks")
Dixie Chicks
NIL
CL-USER> (format t "~a" :title)
TITLE
NIL

~t

タブを指定する。
「~10t」とすると,10カラム分の領域を開ける。
「~t」では,引数は消費されない。

CL-USER> (format t "~a:~10t~a" :artist "Dixie Chicks")
ARTIST:   Dixie Chicks
NIL

~{ ~}

formatが「~{」を見つけたら,次に消費される引数はリストでなければならない。
formatはそのリストの要素を使って,
「~{」と「~}」に挟まれた部分にある指示子を処理していく。

~%

改行コードを出力する。

G

H

I

J

K

L

load -> プログラミング::CommonLisp

M

make-list

任意の長さのリストを作る。
> (make-list 3 :initial-element 'hoge)
(hoge hoge hoge)

:initial-elementが与えられていなければ,要素がnilとなる
> (make-list 4)
(nil nil nil nil)

mapcar

マップ関数でよく使われるもの。
マップ関数:リストに対して連続的に関数を適用する。
> (mapcar #'(lambda (x) (+ x 10))
         '(1 2 3))
(11 12 13)

> (mapcar #'list
          '(a b c)
          '(1 2 3 4)
((a 1) (b 2) (c 3))

N

nconc

破壊的なappend
;; 動作例
> (setf hoge '(a))
> (append hoge '(b))
(a b)
> hoge
(a)

> (nconc hoge '(b))
(a b)
> hoge
(a b)

O

P


prog1

プログワン。
式1 ... 式nまで評価し,式1の値を返す。
(prog1 式1 式2 ... 式n)

push

リストに要素をconsする
(push 式 場所)
> (setf lis '(1 2)
(1 2)
> (push 'a lis)
(a 1 2)

pop

pushの逆。
リストから要素を取り出す
(pop 場所)
> lis
(a 1 2)
> (pop lis)
a

Q

R

rplaca

rplacd


S

subst

substitute。サブスト。
(subst x y z)
zの中の全てのyをxに置き換える。
substitue x for all y in z。
CL-USER> (subst 'a 'b '(a b (b ba) nil a))
(A A (A BA) NIL A)

定義
(defun subst (new old tree)
  (cond ((eq old tree) new)
        (t (cons (subst new old (car tree))
                 (subst new old (cdr tree))))))

sublis

複数種類の置き換えを一括で行う。
  • 1種類
CL-USER> (sublis '((a b)) '(a b (b ba) nil a))
((B) B (B BA) NIL (B))
CL-USER> (sublis '((a . b)) '(a b (b ba) nil a))
(B B (B BA) NIL B)

  • 2種類
CL-USER> (sublis '((a . aa) (c . dd)) '(a b c d (d b ba) c nil a))
(AA B DD D (D B BA) DD NIL AA)

  • 定義
(defun mysublis (alist tree)
  (let ((pair (assoc tree alist)))
    (cond (pair (cdr pair))
          ((atom tree) tree)
          (t (let ((a (mysublis alist (car tree)))
                   (d (mysublis alist (cdr tree))))
               (cond ((and (eq a (car tree))
                           (eq d (cdr tree)))
                      tree)
                     (t (cons a d))))))))

T

U

V

W

when

(when 条件 式1...式n)

X

Y

Z

最終更新:2012年01月24日 18:06