gpt4 book ai didi

Prolog简单谓词,如何实现?

转载 作者:行者123 更新时间:2023-12-02 02:48:22 24 4
gpt4 key购买 nike

我有一个谓词:

neig(I, J, I1, J1):-
I1 is I - 1,
I1 >= 0,
J1 is J.
neig(I, J, I1, J1):-
I1 is I + 1,
not(I1 > 8),
J1 is J.
neig(I, J, I1, J1):-
J1 is J - 1,
J1 >= 0,
I1 is I.
neig(I, J, I1, J1):-
J1 is J + 1,
not(J1 > 8),
I1 is I.

neig(I, J, I1, J1):-
I1 is I - 1,
J1 is J - 1,
I1 >= 0,
J1 >= 0.
neig(I, J, I1, J1):-
I1 is I + 1,
J1 is J + 1,
not(I1 > 8),
not(J1 > 8).
neig(I, J, I1, J1):-
I1 is I + 1,
J1 is J - 1,
J1 >= 0,
not(I1 > 8).
neig(I, J, I1, J1):-
I1 is I - 1,
J1 is J + 1,
I1 >= 0,
not(J1 > 8).

如何编写谓词all_neighs(I, J, L),其中L是列表,它包含所有不同的元素[I1, J1] code>,这样 neigh(I, J, I1, J1)

最佳答案

我认为您需要这个内置谓词。

findall(Things,GoalCondition, Bag)

看起来像这样:

all_neighs(I,J,L) :- findall([H|T],neig(I,J,H,T), L).

如果你想要的话,你可能必须检查 T 是否是原子。但我的结果是通过一些例子。

1 ?- all_neighs(0,0,X).
X = [[1|0], [0|1], [1|1]].

2 ?- all_neighs(1,1,X).
X = [[0|1], [2|1], [1|0], [1|2], [0|0], [2|2], [2|0], [0|...]].

您还应该看看这个:[1]它解释了如何轻松地自己实现 findall(...) 谓词。

[1] http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/2_12.html

关于Prolog简单谓词,如何实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6236795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com