簡體   English   中英

Prolog 簡單謂詞,如何?

[英]Prolog simple predicate , How?

我有一個謂詞:

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] ,例如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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM