Prolog:制作打印 Hello World 的程序
Posted
技术标签:
【中文标题】Prolog:制作打印 Hello World 的程序【英文标题】:Prolog: Making a procedure to print Hello World 【发布时间】:2011-02-03 02:48:18 【问题描述】:我想将这个简单的东西加载到我的编辑器中:
Write:-repeat,write("hi"),nl,fail.
这样它就会打印“hi”。
我该怎么办?
我目前正在尝试做File->New
并将名为 Write 的文件保存到 E:\Program Files\pl\xpce\prolog\lib
查询时:
?-写。
正在打印:
1 ?- Write.
% ... 1,000,000 ............ 10,000,000 years later
%
% >> 42 << (last release gives the question)
为什么?
【问题讨论】:
顺便说一句,那个“错误信息”是对《银河系漫游指南》的引用。 我知道。我喜欢那些书,但我觉得那个信息很愚蠢。这是一个令人费解的笑话。 【参考方案1】:编辑
我做了更多的研究。显然,这就是 SWI-Prolog 在您询问未实例化变量时所做的事情。
$ prolog
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 5.6.64)
Copyright (c) 1990-2008 University of Amsterdam.
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.
For help, use ?- help(Topic). or ?- apropos(Word).
?- X.
% ... 1,000,000 ............ 10,000,000 years later
%
% >> 42 << (last release gives the question)
?-
更新
将名称更改为小写有效。大写用于变量:
helloworld.prolog:
helloworld:-write('Hello World!'),nl,fail.
然后:
$ prolog
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 5.6.64)
Copyright (c) 1990-2008 University of Amsterdam.
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.
For help, use ?- help(Topic). or ?- apropos(Word).
?- ['helloworld.prolog'].
% helloworld.prolog compiled 0.00 sec, 1,376 bytes
true.
?- helloworld.
Hello World!
false.
?-
请注意,您必须先查阅文件。我试过了,它确实有效。
【讨论】:
我不这么认为,我把程序改成Write:-write("hi"),它也在做同样的事情。 好的,我该如何打印?我想做一个简单的“hello world”。 您不能以大写字母开始程序。将您的代码更改为hello_world:-write('hello world'),nl,fail.
请注意,我以 小写 字母开始该过程。
你把helloworld.prolog保存在什么目录下?你为什么使用 .prolog 扩展名?我的 SWI 只识别扩展名为 .pl 的文件。
在我调用 prolog
的同一目录中。我使用.prolog
作为任意扩展名。 SWI Prolog 没有抱怨。您可以将其更改为.pl
,它应该仍然可以工作。【参考方案2】:
您需要将过程命名为write
,而不是Write
。大写首字母用于变量。 (如果您将其称为 writeHi
之类的其他名称,则可能不会那么混乱,因此它与内置过程的名称不同,但是当您将其称为 write
时,它仍然可以工作,因为您编写与内置的不同)。
您可能还想用'hi'
替换"hi"
,尽管这两种方式都可以(但只有第二个版本实际上会将单词hi 打印到屏幕上——您的版本会将它打印为整数列表)。
【讨论】:
不,我将子句更改为 writehello:-write("hi")。现在它正在打印:错误:未定义的过程:writehello/0。我认为问题在于我保存子句的物理位置。顺便说一句,我不确定,但我认为将其称为“条款”比“程序”更正确。 @dmindreader:好吧,你必须先加载(consult
)文件,然后再尝试调用它。我向您保证,它适用于小写名称。我真的试过了。以上是关于Prolog:制作打印 Hello World 的程序的主要内容,如果未能解决你的问题,请参考以下文章