その他演算の関数
(準備中)
アトムとリストでは、Lispの特長であるアトムとリストについて触れました。Lispらしさという点からいうと、
リスト処理をとりあげるのが本来の順序でしょうが、四則演算に続いて、今回もその他の数値演算をとり
あげてみます。やはりその方が他のプログラム言語からの入門者がなじみやすいでしょうから。
1 数値演算の基本関数
LISPにもABS(絶対値)やMAX(最大値)を求める基本関数が準備されています。この他にもLISP処理系
によって、いろんな関数があらかじめ用意されているはずです。
一般的な使い方
(ABS X) Xの絶対値を返す。
(MAX X Y) XとYの大きいほうの値を返す。
XLISP-PLUS version 3.04 Portions Copyright (c) 1988, by David Betz. Modified by Thomas Almy and others. > (ABS 6) 6 > (ABS -5) 5 > (MAX 2 3) 3 > (MAX 1 5 10) 10 |
2 大小比較、数値の判定
LISPにも数値の大小比較、正負判定、奇数・偶数の判定用の関数があります。
大小比較には、GREATERP, LESSP と言う関数を使うLISPが多いと思いますが、xl304winは >,
< という
不等号そのものを使うようです。
大小比較や正負判定の結果、判定結果が真の場合はTが、偽の場合はNILが返されます。
一般的な使用例
(GREATERP X Y) X>Yの時はTを、それ以外の場合はNILを評価結果として返す。 xl304winでは(>
X Y)
(LESSP X Y) X<Yの時はTを、それ以外の場合はNILを評価結果として返す。 xl304winでは(<
X Y)
(EQ X Y) X=Yの時はTを、それ以外の場合はNILを評価結果として返す。
(PLUSP X) X>0の時はTを、それ以外の場合はNILを評価結果として返す。
(MINUSP X) X<0の時はTを、それ以外の場合はNILを評価結果として返す。
(ZEROP X) X=0の時はTを、それ以外の場合はNILを評価結果として返す。
(ODDP X) Xが奇数の時はTを、それ以外ではNILを評価結果として返す。
(EVENP X) Xが偶数の時はTを、それ以外ではNILを評価結果として返す。
(NUMBERP X) Xが数値の場合はTを、それ以外ではNILを返す。
XLISP-PLUS version 3.04 Portions Copyright (c) 1988, by David Betz. Modified by Thomas Almy and others. > (plusp 2) T > (minusp 2) NIL > (eq 3 4) NIL > (evenp 5) NIL > (oddp 5) T > (zerop 1) NIL > (zerop (- 1 1)) T > (numberp 1) T > (numberp (quote x)) NIL |
ちょっとだけ説明。
上から7番目の (zerop (- 1 1)) は (- 1 1)の演算の結果0になるので、(zerop
0)と同じことになる。従って
評価結果はTになります。
9番目の(number (quote x))は、(quote x)がxそのものを表すことになるので、数値ではないと評価されてNIL
になります。QUOTEについては詳しくは他の回で説明します。
YOOLWの場合
YOOLWに組み込まれているのは、abs,greaterp, lessp, eq などで、max,, evenp,
oddp, zerop
などは組み込まれていない。組み込まれていない関数を使うとErrorが表示される。
plusp,minuspはError表示にはならないが正しい動作をしない。(Helpを見る限り、plusp,
minuspは
組み込み関数として定義されていない)
3 論理演算
論理演算の関数にはAND(論理積)とOR(倫理和)があります。
一般的な使い方
(AND X1 X2 .. Xn)
X1,X2からXnまで順に評価を行い、全てNIL(偽)でないの時のみTを返す。 途中でNILがあった場合はNILを
返し、以降は評価しない。引数のS式は必ずしもT,NILを返す関数でなくてもよい。
(OR X1 X2 .. Xn)
X1,X2からXnまで順に評価を行い、一つでもNIL(偽)でないものがある時にTを返す。途中にNILでない式があれば以降は
評価しない。引数のS式は必ずしもT,NILを返す関数でなくてもよい。
x304winでの実行例
XLISP-PLUS version 3.04 Portions Copyright (c) 1988, by David Betz. Modified by Thomas Almy and others. > (and T T) T > (and T T NIL) NIL > (and (plusp 1) (evenp 2)) T > (and (plusp 1) (evenp 2) (+ 1 2)) 3 > (and (- 4 2) (plusp 1) (evenp 2)) T > (and (plusp 1) (* 2 3) (evenp 2)) T > (and (plusp 1) (zerop (* 2 3)) (evenp 2)) NIL > (or NIL NIL) NIL > (or T NIL) T > (or (zerop 2) (oddp 4)) NIL > (or (zerop 2) (oddp 4) (+ 1 2)) 3 > (or (zerop 2) (oddp 4) (numberp 5)) T
少しだけ説明
(and T T NIL) ひとつでもNILがあれば結果はNILになる。
(and (plusp 1) (evenp 2)) 引数はS式を使える。
(and (plusp 1) (evenp 2) (+ 1 2)) 最後の引数が演算式になっていると演算式の結果の3がリターンされている。
(and (- 4 2) (plusp 1) (evenp 2)) 途中に演算式がある場合は演算式の結果はおそらくスキップされて結果が返される。