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

Prolog Using lists with between inside predicate

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

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

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

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

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

但是我很困惑。

所以我有

1
2
3
4
5
6
7
8
9
10
11
12
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)).在这里失败,我不确定为什么。

感谢您的帮助!


代替

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

您的意思是

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

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