数値の比較が主。でも文字列用のもある。
数値の比較述語
数値の比較用のFunctions->Kernel->Control->Predicatesから呼び出せる。もちろん入力ボックスにその関数名を打ち込んでも呼び出せる。
| 関数 | 書き | テスト |
|---|---|---|
#ref error :画像を取得できませんでした。しばらく時間を置いてから再度お試しください。 |
OM= | A=Bならt(真)、そうでないならnil(偽)を返す |
#ref error :画像を取得できませんでした。しばらく時間を置いてから再度お試しください。 |
OM/=(OM!=ではない) | A≠Bならt、そうでないならnil |
#ref error :画像を取得できませんでした。しばらく時間を置いてから再度お試しください。 |
OM<= | A≦Bならt、そうでないならnil |
#ref error :画像を取得できませんでした。しばらく時間を置いてから再度お試しください。 |
OM>= | A≧Bならt、そうでないならnil |
#ref error :画像を取得できませんでした。しばらく時間を置いてから再度お試しください。 |
OM< | A<Bならt、そうでないならnil |
#ref error :画像を取得できませんでした。しばらく時間を置いてから再度お試しください。 |
OM> | A>Bならt、そうでないならnil |
これらOM用のものの他に、Lispに基本的に備わっている比較述語がある。それらは"OM"の文字を除いた例えば"="、">="のようなもの。
これらは3つ以上の引数を取れる。引数の増やし方は以前に解説した。
これらは3つ以上の引数を取れる。引数の増やし方は以前に解説した。
文字列の比較述語
文字列が同じか(+大文字小文字まで)どうかを調べたり、アルファベット順に並んでるか(+大文字小文字まで)どうかを調べる比較述語がある。
詳しくはLispのマニュアルを参照されたし。
#ref error :画像を取得できませんでした。しばらく時間を置いてから再度お試しください。
詳しくはLispのマニュアルを参照されたし。
同値述語について
同値述語は数値だけじゃなくいろんなものを比べられるのだが、2と2.0は一緒なのか・"A"と"a"と'a(パッチエディタ上では'を付けない)は一緒なのかと、いろいろある。
はっきり言ってややこしいので、4つあると覚えといてうまくいかなかったら変えるぐらいの感じで。
はっきり言ってややこしいので、4つあると覚えといてうまくいかなかったら変えるぐらいの感じで。
| 例 | |
|---|---|
#ref error :画像を取得できませんでした。しばらく時間を置いてから再度お試しください。 |
eq 'A 'A -> t (パッチエディタ上では'を付けない) eq 'A 'a -> t (パッチエディタ上では'を付けない) eq "A" "A" -> nil eq '(A B C) '(A B C) -> nil eq 2 2/1 -> t eq 2 2 -> t eq 2.5 2.5 -> nil |
#ref error :画像を取得できませんでした。しばらく時間を置いてから再度お試しください。 |
eql 2.0 2.0 -> t eql 2.0 2 -> nil |
#ref error :画像を取得できませんでした。しばらく時間を置いてから再度お試しください。 |
equal (A (b) C) (a (B) c) -> t equal "A" "A" -> t equal "A" "a" ->nil equal 2.5 2.5 ->t |
#ref error :画像を取得できませんでした。しばらく時間を置いてから再度お試しください。 |
equalp 2 2/1 -> t equalp 2.5 2.5 -> t equalp 2 2.0 -> t equalp "A" "a" -> t |
同値述語はLisp関数
同値述語はLisp関数であってOMのメニューから呼び出せない。入力ボックスを出して名前を打ち込んで呼び出す。
同値述語の詳細はLispのマニュアルへ。でも見てもどのみちややこしい。
同値述語の詳細はLispのマニュアルへ。でも見てもどのみちややこしい。
数値の同値述語
同値述語では上を見てもわかるように数値だけじゃなく型(整数、小数、分数)も考慮されるものがある。
とりあえず小数は別物になりやすいと覚えておくといいかもしれない。
とりあえず小数は別物になりやすいと覚えておくといいかもしれない。
テスト関数として
制御フローだけじゃなくて、リストから条件に合うやつを消すだとか、条件に従ってソートするみたいな比較関数としても使われる。後のページで解説。