简单的Prolog生成器 [英] Simple Prolog generator

查看:91
本文介绍了简单的Prolog生成器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆