先日決めた方針通り、"Common Lisp: A Gentle Introduction to Symbolic Computation"を読みながら基礎固めをしていく。
最初はプログラミング経験者であれば飛ばしてもよいような内容のようだ。とはいえ私は未経験者みたいなものかもしれないので飛ばさずに読んでいこうと思う。
ちなみに最初はまだcode表記ではなくブロック図で話が進む。
Contents
数値に対するFunction
どんな言語にもあるだろうが、数値に対する四則演算はもちろん用意されている。
- 四則演算:
+
,-
,*
,/
- 絶対値:
ABS
- 平方根:
SQRT
Integer, Ratio, floating point
Common Lispでは実数を表すものが3種類ある。
- 整数
- 分数
- 浮動小数点数
難しい話ではないと思うが、演算結果がどうなるかはある程度意識していたほうが良いかもしれない。
数値 or シンボル
データは先に述べた数値もしくはシンボルということのようだ。
つまりは1とか1/2とか1.0とかの数値以外はすべてシンボル。上で述べた演算子もすべてシンボル。いまいちだからどうしたという感じではあるが、"Symbolic Computation"と言ってるし特徴なのかもしれない。この時点では文字列はでてきていない。Common Lispはあまり文字列を使わないのかな。
そのほかのFunction
先に述べた数値に対する演算以外にも以下のPredicatesが紹介されている。"Predicates"なのでxxxpという名前が一般的に使われている。Scheme流だとxxx?らしい。
numberp
: 数値ならばT
それ以外NIL
symbolp
: シンボルならばT
それ以外NIL
zerop
: 0ならばT
それ以外NIL
oddp
: 奇数ならばT
それ以外NIL
evenp
: 偶数ならばT
それ以外NIL
<
: 2つの入力の大小関係が<
ならばT
それ以外NIL
>
: 2つの入力の大小関係が>
ならばT
それ以外NIL
equal
: 2つの入力が等しければT
それ以外NIL
not
: 入力がNIL
ならばT
それ以外はNIL
Common Lispでは"true","false"をT
とNIL
で表すが、NIL
以外は"true"扱いとなる。
eaual, eq, eql, equalp
Common Lispにはequal
,eq
,eql
,equalp
とそれぞれ微妙に異なるfunctionがあるようだ。今の時点ではequal
を使っておけばよいということだ。何が違うんだこれ?
equal
は比較対象が何かを確認したうえで適切なもの(例えばeq
)を選んでいるようだ。
まとめ
- いわゆる普通の四則演算ができる。
+
,-
,*
,/
,ABS
,SQRT
- 整数、分数、浮動小数点数を使える。(複素数もできたよね?)
- データは数値かシンボル(文字列はでてきていない)
- ほかにも"predicates"(入力に対して何かしらの判定をして
T
orNIL
を返す)がある。
コメント