2015-12-25 73 views
1

我的一些Prolog程序可以利用有點有點,如果我可以替換所有(is)/2爲基礎的整數算術的對應。SICStus Prolog 4.3.2:clpfd沒有權力?

所以我想力量...與... ,所以我可以用的東西clpfd-Y :)

考慮以下五個Prolog的處理器,支持更換X is 10^3

  • GNU Prolog 1.4.4

     
    ?- X #= 10^3. 
    uncaught exception: error(type_error(fd_evaluable,(^)/2),(#=)/2) 
    
    ?- X #= 10**3. 
    X = 1000. 
    
  • SWI-Prolog 7.3.14

     
    ?- use_module(library(clpfd)). % autoload would be even more awesome 
    true. 
    
    ?- X #= 10^3. 
    X = 1000. 
    
    ?- X #= 10**3. 
    ERROR: Domain error: `clpfd_expression' expected, found `10**3' 
    
  • B-Prolog 8.1

     
    ?- X #= 10^3. 
    X #= 10^3. 
    *** error(illegal_array_access,10^3) 
    
    ?- X #= 10**3. 
    X = 1000. 
    
  • SICStus Prolog 4.3.2

     
    ?- use_module(library(clpfd)). 
    true. 
    
    ?- X #= 10^3. 
    ! Existence error in (^)/2 
    ! constraint user:wi(^)/2 does not exist 
    ! goal: 10^3 
    
    ?- X #= 10**3. 
    ! Existence error in user:(**)/2 
    ! constraint user:(**)/2 does not exist 
    ! goal: 10**3 
    

想法/提示/建議,請。 我能做什麼?或許使用一些兼容性層?

預先感謝您!

+1

更難處理的數字範圍差異!參見例如Markus Triska [論文](http://www.metalevel.at/drt.pdf) – CapelliC

+0

@CapelliC。我沒有得到那個......你指的是什麼?請指出我的論文中的某些頁面......或者您可能指的是以下限制之一?多個求解器如何能夠優雅地進行交互?或者像'length/2'這樣的內置插件如何不能處理FD變量,因爲實現還沒有趕上? – repeat

+0

@CapelliC。快樂的聖誕節,順便說一句!上升和發光的主已經來到了地球...... – repeat

回答

1

快速入侵?

警告:大規模的矯枉過正,但...它甚至可以工作嗎?它是否便攜?

讓我們來看看吧!

  • SWI-Prolog的使用7.3.14

    • 使用

       
      ?- use_module(library(clpq)). 
      true. 
      
      ?- clpq:{X = 10^3}, integer(X). 
      X = 1000.       % <== SUCCESS! 
      
    •  
      ?- use_module(library(clpr)). 
      true. 
      
      ?- clpr:{X = 10^3}, integer(X). 
      false. 
      
  • SICStus Prolog 4.3。2

    • 使用

       
      ?- use_module(library(clpq)). 
      true. 
      
      ?- clpq:{X = 10^3}, integer(X). 
      false. 
      
    • 使用

       
      ?- use_module(library(clpr)). 
      true. 
      
      ?- clpr:{X = 10^3}, integer(X). 
      false. 
      

1X成功,3X失敗...作品,好吧,那種...然後,我想不是這樣。

+2

'clpr'和'clpq'按預期工作:'10^3'的浮點數'1000.0';和'clpq'的'rat(1000,1)'。 – false

+0

我擔心clpfd不兼容 - 開箱即用,至少 - 用clpq/clpr。所以你的解決方案對我來說似乎很不好。也許'簡單'一詞重寫,與goal_expansion,可以幫助,並最終語法宏基於: - if(swi)或: - if(sictus)... – CapelliC

+0

@false。這是一個期望的問題。所以(雖然這打破了我的破解),SWI中的clpq應該給'rat(1000,1)'而不是'1000'嗎? – repeat

相關問題