【问题标题】:Prolog simple predicate , How?Prolog 简单谓词,如何?
【发布时间】:2012-06-04 21:54:39
【问题描述】:

我有一个谓词:

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)

【问题讨论】:

    标签: prolog


    【解决方案1】:

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

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多