先日決めた方針通り、"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それ以外NILsymbolp: シンボルならばTそれ以外NILzerop: 0ならばTそれ以外NILoddp: 奇数ならばTそれ以外NILevenp: 偶数ならばTそれ以外NIL<: 2つの入力の大小関係が<ならばTそれ以外NIL>: 2つの入力の大小関係が>ならばTそれ以外NILequal: 2つの入力が等しければTそれ以外NILnot: 入力が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"(入力に対して何かしらの判定をして
TorNILを返す)がある。

コメント