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 的程序的主要内容,如果未能解决你的问题,请参考以下文章

使用多线程的方式打印 Hello World

java 打印出“Hello World”的基本Java程序。

为什么在Python 2.7中自动打印括号?

java 线程示例,每秒打印一次Hello world

这如何打印“hello world”?

为啥“Hello world”会打印 2 次?