2014-04-11 34 views
1

我有以下謂詞格式化輸出在序言

sqrt_table(X,Y,Result):- 
    X=:=Y, 
    Z is sqrt(X), 
    Result = [[X,Z]]. 
sqrt_table(X,Y,Result):- 
    X>Y, 
    Q is X-1, 
    sqrt_table(Q,Y,Z), 
    T is sqrt(X), 
    append([[X,T]],Z,Result). 

當我使用它,它輸出了我一個整數,即。 2,3,4,5,6,而不是浮動。如何格式化以輸出浮點結果?

+0

你可以顯示你輸入的查詢嗎?當我按原樣運行你的代碼時,它顯示的是浮點數,而不是數字。 – lurker

回答

1

可能是您Prolog的錯誤。你在用什麼?在SWI-Prolog的,我得到

?- sqrt_table(5,2,L). 
L = [[5, 2.23606797749979], [4, 2.0], [3, 1.7320508075688772], [2, 1.4142135623730951]] 
. 

比較合理的,我想......

編輯現在我明白你的問題:你需要訪問的子列表浮點數...在這裏我使用會員獲得回溯訪問計算列表

2 ?- sqrt_table(5,2,L),member([_,R],L),format('~4f',R). 
2.2361 
L = [[5, 2.23606797749979], [4, 2.0], [3, 1.7320508075688772], [2, 1.4142135623730951]], 
R = 2.23606797749979 ; 
2.0000 
L = [[5, 2.23606797749979], [4, 2.0], [3, 1.7320508075688772], [2, 1.4142135623730951]], 
R = 2.0 ; 
... 
+0

我可以做一些格式(「結果如下:〜4f〜n」,[結果]) –

+0

讓我試試.... – CapelliC

+0

我們可以將它應用於上面的代碼嗎? –