2

私の Prolog プログラムのいくつかは、 に基づく整数演算をすべての対応するものに置き換えることができれば、かなりの利益を得ることができます。 (is)/2

だから私は力が欲しい... X is 10^3 ...だから何かclpfd-yに置き換えることができる:)

をサポートする次の 5 つの Prolog プロセッサを検討してください。

  • GNU プロローグ1.4.4

    ?- X #= 10^3。
    キャッチされていない例外: error(type_error(fd_evaluable,(^)/2),(#=)/2)
    
    ?- X #= 10**3.
    X = 1000。
    
  • SWI-プロローグ7.3.14

    ?- use_module(ライブラリ(clpfd))。% autoloadはさらに素晴らしいでしょう
    真実。
    
    ?- X #= 10^3。
    X = 1000。
    
    ?- X #= 10**3.
    エラー: ドメイン エラー: `clpfd_expression' が必要ですが、`10**3' が見つかりました
    
  • B-プロローグ8.1

    ?- X #= 10^3。
    X #= 10^3。
    *** エラー(illegal_array_access,10^3)
    
    ?- X #= 10**3.
    X = 1000。
    
  • SICStus プロローグ4.3.2

    ?- use_module(ライブラリ(clpfd))。
    真実。
    
    ?- X #= 10^3。
    ! (^)/2 に存在エラー
    ! 制約ユーザー:wi(^)/2 は存在しません
    ! 目標: 10^3
    
    ?- X #= 10**3.
    ! ユーザーの存在エラー:(**)/2
    ! 制約 user:(**)/2 は存在しません
    ! 目標: 10**3
    

アイデア/ヒント/アドバイスをお願いします。私に何ができる?おそらくいくつかの互換レイヤーを使用しますか?

前もって感謝します!

4

2 に答える 2

2

救助へのクイックハック?

警告: 大規模なオーバーキルが先ですが... うまくいきますか? そして、それはポータブルですか?

それをチェックしよう!

1回の成功、3 回の失敗... うまくいきます。

于 2015-12-25T06:44:44.253 に答える
0

定数式に使用できます:

?- X is 10^3.
X = 1000.

corr2のおかげで、ISO準拠のプロローグで動作するはずです。

X #= 10^3 であるかのように、CLP(FD) 内にも伝播します。

?- Y #= X+1, X is 10^3.
Y = 1001
X = 1000
于 2018-10-19T18:20:52.610 に答える