Prolog - 将列表保存到原子之类的东西中?

Prolog - Save List into something like an atom?

我做了一些谓词,它将一个非常复杂的列表保存到一个变量中P。 比方说:

  pred(P) :- 
    P = [[1, a, b, c, 234],d].

现在我想把这个列表放到另一个谓词中,比方说

  pred2(P, L) :-
    nth1(2, P, L).

我现在的问题是,我不想将 [[1, a, b, c, 234], d] 作为参数复制到 P 中。他们是一种简单的方法吗,也许是定义一个原子或其他快捷方式,例如'test' := [[1, a, b, c, 234],d]。并致电 ?- pred2('test', L)?

简单的方法是调用您定义的谓词:

   pred2(L) :-
     pred(P),    % :- P = [[1, a, b, c, 234],d].
     nth1(2, P, L).

这将首先“设置”而不是实例化逻辑变量P,然后用它来“设置”L

注意P这里已经变成内部变量了。调用 pred2 时不必设置它。 pred2 将为您调用 pred,设置 P