在prolog中格式化输出

在prolog中格式化输出,prolog,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,而不是浮点数。如何格式化它以输

我有以下谓词

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

可能是Prolog的一个错误。你在用什么?在SWI Prolog中,我得到

?- sqrt_table(5,2,L).
L = [[5, 2.23606797749979], [4, 2.0], [3, 1.7320508075688772], [2, 1.4142135623730951]] 
.
很合理,我认为

现在编辑我了解您的问题:您需要访问子列表中的浮点数。。。在这里,我使用member对计算列表进行回溯访问

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

我可以做一些类似于格式化(“结果如下:~4f~n,[Result])的事情吗?您的意思是插入列表的位置?尝试
格式(atom(A),“~4f”和[X])
并将其放入列表中。但我认为这不是一个好主意…你能显示你输入的查询吗?当我按原样运行代码时,它显示的是浮点数,而不是四舍五入的数字。