在prolog中格式化输出

时间:2014-04-11 08:19:36

标签: prolog

我有以下谓词

 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,而不是浮子。如何格式化以输出浮点结果?

1 个答案:

答案 0 :(得分: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 ;
...