Prolog可执行文件在代码

时间:2016-07-12 14:31:55

标签: prolog native

我正在尝试创建以下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位)。我怎么解决这个问题。谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

在几乎所有这些情况下,事实证明:

  1. 您不应该首先使用副作用。相反,定义您可以实际推理的关系。在您的情况下,您描述的是平均值与其最大值之间的关系。因此,名称maximum_mean_value(Ms, M)表明了自己。并is_that_not_more_readablemixingLowerAndUpperCaseLetters

  2. 让顶层为您打印,通过以下纯查询:

    ?- maximum_mean_value(Ms, M).
    M = ... . % result is automatically shown by the toplevel!
    
  3. 如果确实需要在终端上写一些内容,请在单独的谓词中执行。 避免混合使用纯净且不纯的代码。

  4. 使用 format/2 格式化输出。例如:

    maximum_mean_value(Ms, M),
    format("Maximum mean value: ~d\n", [M]) 
    

    请注意format/2如何轻松输出涉及其他字词的文字。