Prolog:从列表元素中创建functor术语

时间:2012-11-26 22:59:50

标签: prolog

我需要为谓词提供一个列表,并从中返回一个包含该列表元素的术语。

所以我会有类似的东西:

turn_into_struct(+List, -Term).

我想到的一件事是对列表的每个元素递归使用nb_setarg/3,但是这样我需要用特定的arity实例化这个术语,我找不到怎么做

2 个答案:

答案 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在其他答案的评论中提及,但我将其作为后代和更高知名度的答案重新发布)