15
13

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.

Lisp入門メモ

Last updated at Posted at 2015-02-10

見てるページ
Lisp入門

#基本演算

>(+ 10 20)
30

#代入

>(setq x 10)
10

#特別式
setq は言語仕様上は関数ではなく 特別式 と呼ばれる.
(関数とは違う振る舞いをするから)
##quote識別子

> (quote var)

varを記号型にする.
記号型:=変数みたいなもの
(setq x 10) はできるけど, (set x 10) はできない.
set のときは,引数に記号型を渡さなければならない.

ということで, (set (quote x) 10) とすればいい.
'(set 'x 10)' も可.

リスト

配列とは違うけど似てる

>(list 1 2 3 4 5)
(1 2 3 4 5)

>(list (list 1 2 3) (list 10 20 30) 100 200 300)
(1 2 3) (10 20 30) 100 200 300)

(1 2 3) は,関数1と引数2 3と評価されてしまう
評価しないようにするには, '(1 2 3) とすればいい.

> (setq x 10 y 20 z 30)
30
> x
10
> (list x y z)
(10 20 30)
> '(x y z)
(X Y Z)

リストの操作

car list
リストの先頭を取得
cdr list
先頭以外を取得
cons addValue list
先頭にデータを追加

>(setq x '(10 20 30))
(10 20 30)

>(car x)
10

>(cdr x)
(20 30)

>(car (cdr x))
20

>(cons 5 x)
(5 10 20 30)

##リストの長さ
length seqence
要素がないリストを nil と表記する.

#すべてはリスト
(+ 10 20) も,正体はリスト

##リストを評価(実行)する
eval form

>(setq add '(+ x y))
>(setq x 10 y 20)
>(eval add)
20

#比較演算
多項比較できる

>(< 1 2 3)
T
>(< 1 2 2)
F

#if文
これも特別式

(if (< x y) (setq z 20))

##progn 特別式
ifによって,複数の式を評価するときにつかう

>(if (< 1 2) (setq x 10) (setq y 20))
10
>x
10 ;動く
>y
error ;動かない
>(if (< 1 2) (progn (setq x 10) (setq y 20)))
20
>x
10
>y
20

whenとかunlessっていうマクロもある

##else ifのようなもの

(cond
    ((= x y) (setq z 1))
    ((< x y) (setq z 2))
    ((> x y) (setq z 3))
)

##switchのようなもの

#gotoのようなもの

15
13
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
15
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?