「Ansi Common Lisp」9章読了
数値に関する章。
データ型
基本は、整数、浮動小数点数、分数(ratio)、複素数の4種類。
図9.1に数値型の一覧と親子関係について載っているのですが、
細分化すると全部で14種類もあります。
複素数をデフォルトでサポートしているところが、なんとなくPythonっぽい。
(むしろ、PythonがCommon Lispっぽいのかも知れませんが。って、前も同じようなこと書いた気が。)
複素数は#c(a b)で書けるらしい。
* (+ #c(1 2) #c(3 4)) #C(4 6) * (eql 1 #c(1 0)) T *
1と#c(1 0)がeqlになってしまうのは、ちょっと意外。
数値はeqlもequalも同じなのかな?
変換と抽出
関数roundが、ちょっと他の言語と違うらしい。
irb(main):002:0> 2.5.round => 3 irb(main):003:0> java.lang.Math.round(2.5) => 3 irb(main):004:0>
* (round 2.5) 2 0.5 *
round 2.5は3になって欲しいかもなあ。
指数
三角関数
そのまんま。読めば分かる。
表現
Common Lispは整数の大きさを制限していない。
Javaでは型によって、取りうる値の範囲は決められていますが、Common Lispではそうではないのですね。
most-うんぬんかんぬんってのを参照すると、処理系に応じた最大値を表示できます。
* (values most-positive-fixnum most-negative-fixnum) 536870911 -536870912 *
他のやつは、
http://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/html/cltl/clm/node134.htmlに載ってるっぽい。(CMUCLの場合)