算術で用いた 10 や -30 などの数値を総称して数値型 (Numbers) と呼びます。 数値型にはいくつかの種類があり、10 などの一般的な数を整数型 (Integers) と呼びます。
Common Lisp では整数型の表現範囲は特に定めていないので、システムが許容する範囲ならば理論上はどのような大きな数値も扱うことができます。 通常、数値は 10 進数で表現され、負数の場合は数字の前にマイナス記号 - が指定されます。 デフォルトで数字は正数と判断されますが、明示的に正の値であることを指定したければ + 記号を数字の前に指定することもできます。
> (+ 5 -7) -2 > (+ +10 +3) 13
基本的に、整数は10進数で表現されますが、必要によっては基数を変更することもできます。 基数を指定するには # から始まる次のような数値を指定します。
#基数r整数 または #基数R整数
ただし、コンピュータプログラミングの場合、10進数以外に用いられる可能性があるのは、2進数、8進数、16進数のいずれかでしょう。 これ以外の基数が使われることは稀なので、#b または #B から始まる整数は2進数、#o または #O から始まる整数は8進数、#x または #X から始まる整数は16進数であると解釈されます。 例えば、#2R... と #b... の意味は同じで2進数の整数表現です。
> #B1000 8 > #8r777 511 > #2r1010 10 > #b1010 10 > #4R321 57 > #X-FF -255 > #3r22 8 > (+ #xA #2r101) 15
この Lisp コマンドでは、単純に数値を入力しています。 特に関数を指定しなければ、結果は数値をそのまま10進数表記で表示されます。
Common Lisp の数値型には分数型 (Ratios) が定められています。 分数型を指定するには2つの整数を / で区切って指定しなければなりません。 除算処理などで、割り切れない結果の場合などに利用することができます。
分子 / 分母
分子と分母に指定する値は整数型なので、負数を指定したり、10進数以外の基数で指定することも可能です。 基数を変更する場合、1/#b10 というように、分子か分母の一方だけに指定するということはできません。 この場合、#b1/10 というように、分数全体に対して指定しなければなりません。
> (/ 2 4) 1/2 > (+ 1/2 1/4) 3/4 > (/ 1 -2) -1/2 > #b1/10 1/2
実数を表すための数値データとして浮動点数 (Floating point number)を使うことも可能です。 通常は、数値リテラルに小数点が指定されていれば、その数値が浮動点数リテラルであると認識されますが、それ以外にも指数を使って浮動点数を表現することができます。
数値 . 数値 指数 数値
特に必要がなければ指数以降は省略することができます。 小数点よりも左、または右の数値のいずれかを省略することもできます。 その場合は、省略部分は 0 として扱われます。
> (+ 1.2 -0.7) 0.50000006 > (+ 1. .3) 1.3 > (+ 1. -.3) 0.7 > 0.0123e2 1.23 > 314E-2 3.14
一般的に、コンピュータで実数を正確に表現し続けるのは難しく、計算結果には誤差が生じます。
Common Lisp は実数と虚数で構成される複素数 (Complex numbers)を表現することができます。 ここで言う複素数や虚数とは、数学で言う複素数、虚数と同じです。 複素数リテラルは次のように記述します。
#C(実数部 虚数部)
実数部には実数を表す数値を、虚数部には虚数を表す数値を指定します。 数値は、整数以外に分数や浮動点数を指定することも可能です。
> (* #C(4 3) #C(4 -3)) 25 > (* #C(1.34 3) #C(1/2 -3)) #C(9.67 -2.52)