prolog - 用 (1,2), (1,-2), (-1,2), (-1,-2), (2,1), (2,-1) 统一 X,Y 的优雅方式是什么, (-2,1), (-2,-1)?

标签 prolog unification

用 (1,2), (1,-2), (-1,2), (-1,-2), (2,1), (2,-1) 统一 X,Y 的优雅方式是什么, (-2,1), (-2,-1)?

这样做似乎容易出错且乏味:

foo(1,2).
foo(1,-2).
foo(-1,-2).
...
...
...

而且这种方式似乎太贵了:
foo(X,Y) :-
  L = [1,-1,2,-2],
  member(X,L),
  member(Y,L),
  abs(X,X1), abs(Y,Y1),
  X1 =\= Y1.

最佳答案

关于评论内容的进一步发展:

generate_pairs_foo(X,Y) :-
  L = [1,-1,2,-2],
  member(X,L),
  member(Y,L),
  abs(X,X1), abs(Y,Y1),
  X1 =\= Y1.

assert_all_foo([]).

assert_all_foo([(X,Y)|T]) :-
  assert(foo(X,Y)), assert_all_foo(T).

find_all((X,Y),generate_pairs_foo(X,Y),L), assert_all_foo(L).

嗯嗯...看,只写所有案例更容易和更短xD

关于prolog - 用 (1,2), (1,-2), (-1,2), (-1,-2), (2,1), (2,-1) 统一 X,Y 的优雅方式是什么, (-2,1), (-2,-1)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1525622/

相关文章:

prolog - Prolog 中的自由变量

syntax - prolog中_和_variable有什么区别?

haskell - fix 只能用非严格评估语言输入吗?

list - Prolog,访问列表的特定成员?

types - 要统一的类型变量出现在类型中

linux - Gerrit prolog规则——充分设置累积投票

c# - Dictionary<List<_>> 是否符合半持久性?

prolog - 一定范围内的列表

functional-programming - 如何与 Elm 中的多态子组件通信?

language-agnostic - 非二元函数的结合性、交换性和单位元