简单的Prolog生成器 [英] Simple Prolog generator
问题描述
我是Prolog的新手,我正在尝试编写简单的生成器,以查找5以下的整数.
I'm big newbie to Prolog and I'm trying to write simple generator which finds the integers below 5.
gen(0).
gen(X):- X<5
当我使用gen(X)运行程序时,它仅打印X = 0并提示我输入内容,当我按Enter键时,再次显示'?-'.
When I run the program with gen(X) it only prints X = 0 and prompts me to enter something and when I press enter the '?-' is shown again.
如何使他生成从零到五个的数字?我正在使用SWI-Prolog.谢谢
How to make him generate the numbers from zero to five ? I'm using SWI-Prolog. Thanks
推荐答案
用于枚举整数的内置谓词介于(Low,High,Num)之间.
The builtin predicate devoted to enumerate integers is between(Low,High,Num).
使用您写的gen(X) :- between(0,4,X).
我以这种方式重新实现了
I've reimplemented between in this way
gen(X) :- between_(0, 4, X).
/* between_(I,J,K) is true if K is an integer between I and J inclusive. */
between_(I,J,I) :- I =< J.
between_(I,J,K) :- I < J, I1 is I+1, between_(I1,J,K).
这个问题最有趣的部分是了解为什么仅带有参数的幼稚实现会永远循环...
The interesting part of the question is to understand why the naive implementation with just an argument loops forever...
gen(0).
gen(X) :- gen(Y), X is Y + 1, X < 5.
?- gen(X).
X = 0 ;
X = 1 ;
X = 2 ;
X = 3 ;
X = 4 ;
^CAction (h for help) ? goals
[374,153] 3<5
[374,152] gen(3)
[374,151] gen(_G1013)
[374,150] gen(_G1013)
[374,149] gen(_G1013)
这篇关于简单的Prolog生成器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!