如何使用if语句-循环

时间:2018-06-24 12:03:52

标签: loops prolog

我正在尝试了解如何在序言中使用if语句或循环,但我无法获取它,因为存在很多不同的情况。java中的示例,如果您想说些可以轻松说的话{{1 }}。如果您想在if(x>=4) { } else if { }之前执行循环操作。在序言中,有很多问题。让我清除一下。我看到一个练习,告诉我们有1个带数字的list1和2个列表,我的意思是(x>4)。我应该做的是我必须创建一个新的list2,其中List1的所有数字都必须不超过10,但是在list2上每个数字应该出现两次。 解释需要进一步清除的内容,在list1中有一个数字可以说14,大于10,因此在list2中它必须是14,14。如何创建if语句,或像这样循环在列表上。已经读够了,但是这种语言至少对我来说是很奇怪的。例如,我已经学习过if语句,但在这种情况下我无法使用它。我在这里搜索过,但没有任何内容。通过给出良好的解释,可以在prolog中使用if语句和循环。在java中创建与if语句或循环“相似”的内容将有助于在prolog中开始的人更容易理解。原因是我在解决它时卡住了。

1 个答案:

答案 0 :(得分:2)

我只是要发表评论,但评论变得冗长!

大多数Prolog初学者面临的最大问题是他们在思考“如何在Prolog中进行X就像在其他语言中进行X一样”。很多时候,这失败了,因为Prolog与其他语言完全不同。是的,您可以强制执行此操作,但最终会编写出质量很差的Prolog程序。相反,您需要考虑最初的问题,并根据Prolog的工作方式进行重铸。在Prolog中,您声明描述逻辑和算术关系的事实和规则(声明性),而不是使用步骤顺序(命令性)指导计算机做什么的函数。这不是Prolog的“问题”。问题是初学者不了解Prolog。

让我们开始用Prolog术语描述您的问题。您需要一个规则来描述列表之间的关系,其中第二个列表重复第一个列表中大于10的元素。让我们将关系称为dup_greater_than_10

基本情况很简单:空列表[]是空列表的“大于10的重复”:

dup_greater_than_10([], []).

现在,您需要处理非空列表中的每个元素。 Prolog中的列表可以写为首尾(列表的其余部分):[X|Xs]是一个列表,其第一个元素为X,而“列表的其余部分”(结尾)是列表Xs

让我们为X不大于10的情况写一条规则。在这种情况下,第二个参数的头应与第一个参数的头相同:

dup_greater_than_10([X|Xs], [X|Ys]) :-
    X =< 10,
    dup_greater_than_10(Xs, Ys).

此规则说,如果[X|Ys] 列表[X|Xs]X =< 10是列表Ys的“大于10的两倍”版本列表Xs中的“大于10的重复”。

现在,您需要规则X > 10。我将对其进行描述,并将简单的Prolog的内容留给您:

  

[X,X|Ys][X|Xs] if X > 10的“ dup大于10”,列表Ys是“ dup大于10” Xs中的“”。

看看在列表的开头表示X的重复有多么简单?在Prolog中,您可以编写一个列表:[X1, X2, ..., Xn|T],该列表以初始元素X1X2,...,Xn和尾部{{1} }。

所以您看到,当您问“我如何在Prolog中执行T语句和if时,您会问错一个问题。这就像在问:“我如何用扳手敲打指甲?”可以完成,但是效率低下,而且效果不佳。正确的问题是:“如何解决Prolog中的此类问题?”