ド素人が始めるCommon Lisp 4. dataとfunction

Common Lisp ド素人

先日決めた方針通り、"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"をTNILで表すが、NIL以外は"true"扱いとなる。

eaual, eq, eql, equalp

Common Lispにはequal,eq,eql,equalpとそれぞれ微妙に異なるfunctionがあるようだ。今の時点ではequalを使っておけばよいということだ。何が違うんだこれ?
equalは比較対象が何かを確認したうえで適切なもの(例えばeq)を選んでいるようだ。

まとめ

  • いわゆる普通の四則演算ができる。+, -, *, /, ABS, SQRT
  • 整数、分数、浮動小数点数を使える。(複素数もできたよね?)
  • データは数値かシンボル(文字列はでてきていない)
  • ほかにも"predicates"(入力に対して何かしらの判定をしてT or NILを返す)がある。

コメント

タイトルとURLをコピーしました