我需要为谓词提供一个列表,并从中返回一个包含该列表元素的术语。
所以我会有类似的东西:
turn_into_struct(+List, -Term).
我想到的一件事是对列表的每个元素递归使用nb_setarg/3
,但是这样我需要用特定的arity实例化这个术语,我找不到怎么做
答案 0 :(得分:2)
您可以先找到列表的长度,使用虚拟值构造新术语,然后递归填充或通过回溯填充每个参数(例如,使用findall
)。如果你需要,我会填写更多细节(只要我不破坏你自己的努力)。
length(List, Len),
functor(Struct, struct, Len),
% Fill in each argument of Struct here...
但是,使用SWI-Prolog的=..
谓词有一种更简单的单行技术。
答案 1 :(得分:1)
从列表中创建术语的典型方法是使用=..(又名" Univ")。例如,
turn_into_struct(List, Struct) :-
Struct =.. [structure|List].
" struct"的正确术语原来的问题是" term"。
(Univ在其他答案的评论中提及,但我将其作为后代和更高知名度的答案重新发布)