Prolog 写経記 その 50 ale/2
(ほぼ) 毎日淡々と Prolog を写経します.元ネタはこちら.
- 作者: ボグダンフィリピッチ,中島誠,伊藤哲郎
- 出版社/メーカー: 海文堂出版
- 発売日: 1990/08
- メディア: 単行本
- 購入: 4人 クリック: 33回
- この商品を含むブログ (68件) を見る
ale/2
を写経します.解説
ale(X, Y)
はアトムX
とアトムY
とがアルファベット文字列として等しいか,アルファベット順にみてX
がY
より前にあるときに成功する.
ale ってアレやコレの ale じゃなくて (無理矢理),ASCII の less equal ですね.
Java でいうと... String#compareTo(String)
で結果が 0 以下 (≦) みたいな.
モード
ale(+, +).
ふむ.
定義
では,こいつの定義を写経しませう.
ale(X, Y) :- name(X, L), name(Y, M), ale_ASCII(L, M). ale_ASCII([], []). ale_ASCII([], [_ | _]). ale_ASCII([H | Q], [H | S]) :- !, ale_ASCII(Q, S). ale_ASCII([X | _], [Y | _]) :- X < Y.
えーっと,最後の不等号の向き以外,age/2
と同じなので以下略.
っていうか,
ale(X, Y) :- age(Y, X).
じゃダメなのかなぁ? (^^;
例
では使用例を写経しませう.
2 ?- ale('Word', 'Word'). Yes 3 ?- ale(predicate, pred). No 4 ?- ale('Jane', 'John'). Yes 5 ?- ale(-13.7, -13.7). Yes
最後の例,写経本では冷たく No
と言われてお終いなんですが,以下略.