1

我是 Prolog 的新手 我有这段代码(如果它不是很容易阅读,我很抱歉)

AdjOfAll(State,[FreeSpace],[Result]):-
     Adj(State,FreeSpace,Result).
AdjOfAll(State,[Space|NextSpace],[X|Xs]):-
     AdjOfAll(State,NextSpace,Xs),
     Adj(State,Space,X).

我的问题是 Adj 返回[ (element_1), ... , (element_n) ]

我对 AdjOfAll 的目标是获得,

[ ( element_1), ..., (element_n), (element_1_from 2nd adj), ... ]

但我明白了

[ [ ( element_1), ... ,(element_n)] , [ (element_1_from 2nd adj) ], ... ]

我希望它可以理解我想说的话,抱歉英语不好

4

1 回答 1

1

看看flatten /2 是否可以帮助您获得正确的输出。将它放在对 AdjOfAll/3 的顶级调用之后。

...
AdjOfAll(State, NextSpace, ResultNested),
flatten(ResultNested, Result),
...

顺便说一句,您确定您的谓词命名正确吗?通常它们是小写的。

于 2012-10-28T07:31:20.070 回答