フォーラムへの返信

2件の投稿を表示中 - 1 - 2件目 (全2件中)
  • 投稿者
    投稿
  • 返信先: AZ-Prologのシンタックスについて #58842
    WEBサイト管理者
    キーマスター

    お問い合わせありがとうございます。

    結論から言いますとオペレータの振舞いの取り決め(仕様)です。
    解決方法としてはオペレータ登録されているアトムは()で囲うこ とで そのアトムそのものとして扱われます。
     
     | ?-A = '=',(A== '=' -> true).
     Syntax error
     | ?-A = (=),(A==(=) -> true).
     A = =
     yes

    ====以下説明====
    1. A = B -> true.
    B がオペレータではないため OK

     

    2. A = == .
    = は infix として読み、== はオペレータであり、同様の強度(xfx,700)であるため、
    本来エラーになる筈だが、次 Token が終端があるため、オペレータ扱いにせず( POSTFIXでもない)、
    = (A,==) と理解するため OK

     

    3. 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
     

    ご確認ください。

    WEBサイト管理者
    キーマスター

    掲示板不具合ため、お手数おかけいたしました。
    ご報告ありがとうございます。

    こちら、改行できるよう仕様を変更致しましたので今後も宜しくお願いします。

2件の投稿を表示中 - 1 - 2件目 (全2件中)
上部へスクロール