我正在尝试创建以下Prolog代码的可执行文件:
item(one, 50, 40).
item(two, 80, 70).
item(three, 100, 55).
item(four, 50, 45).
maxMeanStudy:-
findall(M,item(_,M,_),L),
max_member(Max,L),
write("Maximum mean value:"), % this line is not printed properly.
writeln(Max),!.
main:-
maxMeanStudy.
我正在使用以下命令创建此页面中提到的可执行文件:http://www.swi-prolog.org/pldoc/man?section=cmdlinecomp
$ swipl --goal=main --stand_alone=true -o myprog -c myques.pl
创建的可执行文件不会在字母中写入字符串“Maximum mean value:”,而是将其写入代码中:
$ ./myprog
[77,97,120,105,109,117,109,32,109,101,97,110,32,118,97,108,117,101,58]100
我正在使用Linux(32位)。我怎么解决这个问题。谢谢你的帮助。
答案 0 :(得分:3)
在几乎所有这些情况下,事实证明:
您不应该首先使用副作用。相反,定义您可以实际推理的关系。在您的情况下,您描述的是平均值与其最大值之间的关系。因此,名称maximum_mean_value(Ms, M)
表明了自己。并is_that_not_more_readable
比mixingLowerAndUpperCaseLetters
?
让顶层为您打印,通过以下纯查询:
?- maximum_mean_value(Ms, M).
M = ... . % result is automatically shown by the toplevel!
如果确实需要在终端上写一些内容,请在单独的谓词中执行。 避免混合使用纯净且不纯的代码。
使用 format/2
格式化输出。例如:
maximum_mean_value(Ms, M),
format("Maximum mean value: ~d\n", [M])
请注意format/2
如何轻松输出涉及其他字词的文字。