Prolog使用在内部谓词之间的列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Prolog使用在内部谓词之间的列表相关的知识,希望对你有一定的参考价值。

我在Prolog中有一项作业,但我非常不习惯用这种语言编写代码:)

因此,我需要实现一些非常简单但难以编写的内容。

假设我有一个方形房间(例如Dimension 4x4)。我想要一个具有参数pos(Ligne,Column)的函数,该函数可以考虑平方Dimension来验证输入的位置是否正确。

因此,我希望它检查例如pos(1,2)在这种情况下是否为真。

我考虑过用正方形的findall创建一个具有betweenDimension有效位置的列表,然后验证输入的位置是否在此列表内。

但是我很困惑。

所以我有

positif_position( pos(Ligne, Column)) :-
    Ligne >= 0, Column >= 0.

square(Dimension).
shape(square,Dimension) :- square(Dimension).

% Verifying if the position is correct here.
in_shape(pos(Ligne,Column), shape(square,Dimension)) :-
     positif_position(pos(Ligne, Column)),
     Ligne =< Dimension, Column =< Dimension,
     between(0,Dimension,Range),
     member(Ligne, [Range]), member(Column, [Range]).

我真的不知道我的结构方式是否正确。in_shape(pos(1,2), shape(square,4)).在这里失败,我不确定为什么。

感谢您的帮助!

答案

代替

     between(0,Dimension,Range),
     member(Ligne, [Range]), member(Column, [Range]).

您的意思

     findall( I, between(0,Dimension,I), Range),
     member(Ligne, Range), member(Column, Range).

但是这是多余的。到那时您已经检查了有效性。只需删除这两行。您甚至可能在这里出现一个错误的错误。

以上是关于Prolog使用在内部谓词之间的列表的主要内容,如果未能解决你的问题,请参考以下文章

检查元素后返回列表的Prolog谓词

同时应用谓词来过滤列表(SWI Prolog)

谓词用于返回prolog中给定列表的元素顺序的排列

覆盖 Prolog 中的预定义谓词

Prolog中是不是可以接受具有可变数量的谓词?

Prolog:为啥这个谓词找到了答案却忽略了它并继续与[]统一?