Prolog使用在内部谓词之间的列表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Prolog使用在内部谓词之间的列表相关的知识,希望对你有一定的参考价值。
我在Prolog中有一项作业,但我非常不习惯用这种语言编写代码:)
因此,我需要实现一些非常简单但难以编写的内容。
假设我有一个方形房间(例如Dimension
4x4)。我想要一个具有参数pos(Ligne,Column)
的函数,该函数可以考虑平方Dimension
来验证输入的位置是否正确。
因此,我希望它检查例如pos(1,2)
在这种情况下是否为真。
我考虑过用正方形的findall
创建一个具有between
或Dimension
有效位置的列表,然后验证输入的位置是否在此列表内。
但是我很困惑。
所以我有
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使用在内部谓词之间的列表的主要内容,如果未能解决你的问题,请参考以下文章