我有一个函数正方形,我想显示一个这样的矩阵:
XXX (newline)
XXX (newline)
XXX
打印第一行后,我的结果为假。为什么?变量如何在Prolog中传输,行如何执行(排序)?
line(Rez,X) :- Rez>=1 , write(X) , line(Rez-1,X).
square(N,X) :- Rez = N,line(Rez,X),nl,N>1,square(N-1,X).
答案 0 :(得分:1)
您的代码有几个问题。值得注意的是,您正在编写没有基本案例的递归谓词定义。另一个问题是Prolog不是功能语言。当你写例如line(Rez-1,X)
,Prolog不会将Rez-1
评估为算术表达式。对于Prolog,Rez-1
只是一个'-'/2
复合术语,即名称为-
和两个参数的术语。您将需要编写类似NextRez is Rez-1, line(NextRez,X)
的内容。 is/2
标准内置谓词评估其第二个参数(作为算术表达式),并将结果与第一个参数统一。