by shigemk2

当面は技術的なことしか書かない

リスト遊び 2-5 クオート

前回
リスト遊び 2-4 評価 - by shigemk2

;; こいつはエラーになる。1 がシンボルとして見做されるから
(consp (1 2))
;; 評価されてもリストになるようなリストの書きかた1
;; これによりリスト内の1が関数として評価されなくなる。
(quote (1 2))
=>(1 2)
;; 評価されてもリストになるようなリストの書きかた2
;; とはいえquoteって書くのはかったるいよね
;;このやりかたを使うことで、consを使わずにリストが作れる
;;`(1 2)
'(1 2)
=>(1 2)

;; setqを使うことで、第二引数は評価されるが第一引数は評価されなくなる
;; setq = set + quote
(setq dog 5)
=> 5
dog
=> 5
;;`dog
'dog
=> dog

;; まあsetqの具体例
(setq dog 1)
=>1
(setq pig 2)
=>2
(cons dog (cons pig nil))
=>(1 2)
;;`(dog pig)
'(dog pig)
=>(dog pig)

;; 評価される前と後で形のかわらないt nil 整数 特殊文字を含まない文字列は、
;; クォートしても意味がない
;;(setq zoo `(t nil 18 "dog"))
(setq zoo '(t nil 18 "dog"))
=>(t nil 18 "dog")

;; ドット対もクオートする必要がある。
;;(setq flowers `((rose . "red")(violet . "blue")))
(setq flowers '((rose . "red")(violet . "blue")))
=>((rose . "red") (violet . "blue"))

みたいな。

リスト遊び―Emacsで学ぶLispの世界 (ASCII SOFTWARE SCIENCE Language)

リスト遊び―Emacsで学ぶLispの世界 (ASCII SOFTWARE SCIENCE Language)