Home › フォーラム › AZ-Prologサポート掲示板 › AZ-Prologのシンタックスについて
1件の返信スレッドを表示中
-
投稿者投稿
-
-
2018/04/18 9:31 AM #58840kwゲスト最新版のAZ-Prologでカッコ内に ->記号と一部のアトムを入れるとシンタックスエラーになります。バグでしょうか?
AZ-Prolog Version 9.63 (Linux/x64) GCC 5.4.0 Copyright (C) SOFNEC CO., LTD. 1987-2017/06/29 ?- A = '=', A == '='. A = = yes ?- A = '=', (A == '='). A = = yes ?- A = 1, (A == 1 -> true). A = 1 yes ?- A = '=', (A == '=' -> true). Syntax error ?- A = '=', (A == '>' -> true). Syntax error ?- A = '=', (A == '<' -> true). Syntax error ?- A = '=', (A == = -> true). Syntax error ?- A = '=', (A == > -> true). Syntax error ?- A = '=', (A == < -> true). Syntax error
-
2018/04/18 10:50 AM #58842WEBサイト管理者キーマスター
お問い合わせありがとうございます。
結論から言いますとオペレータの振舞いの取り決め(仕様)です。
解決方法としてはオペレータ登録されているアトムは()で囲うこ とで そのアトムそのものとして扱われます。| ?-A = '=',(A== '=' -> true). Syntax error | ?-A = (=),(A==(=) -> true). A = = yes
====以下説明====
1. A = B -> true.
B がオペレータではないため OK2. A = == .
= は infix として読み、== はオペレータであり、同様の強度(xfx,700)であるため、
本来エラーになる筈だが、次 Token が終端があるため、オペレータ扱いにせず( POSTFIXでもない)、
= (A,==) と理解するため OK3. A = == -> true.
= infix として読み、== はオペレータであり、同様の強度(xfx,700)であり、
次 Token(->)が終端 or 区切り文字ではないため NGつまり、= や == , > , < 等は xfx 700 で定義されているので入れ子にはならない。
| ?-read(X),display(X).<br /> |: A = B == C.<br /> Syntax error ---- Backtrace<br /> (read(X_9),display(X_9)) ?-
and や or は yfx 500 で定義されているため入れ子になる。| ?-read(X),display(X). |: X is A and B or C. is(X_87,or(and(A_89,B_91),C_ 93)) X = X_87 is A_89 and B_91 or C_93
以下のようにすると、期待する動作となりますが、 オペレータの定義を
変更することになるので先に記述した解決策が望ましいでしょう。| ?-op(700,xfy,=). yes | ?-op(700,xfy,==). yes | ?-read(X),display(X). |: A = == -> true. ->(=(A_84,==),true) X = A_84= == ->true
ご確認ください。
-
-
投稿者投稿
1件の返信スレッドを表示中
- フォーラム「AZ-Prologサポート掲示板」には新規投稿および返信を追加できません。