3

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

所以我会有类似的东西:

turn_into_struct(+List, -Term).

我确实考虑过的一件事是nb_setarg/3对列表的每个元素递归使用,但是这样我需要用特定的数量来实例化这个术语,但我找不到如何做到这一点。

4

2 回答 2

2

您可以先找到列表的长度,用虚拟值构造新术语,然后递归或通过回溯(findall例如,使用 )填充每个参数。如果您需要,我会填写其他详细信息(只要我不破坏您自己的努力)。

length(List, Len),
functor(Struct, struct, Len),
% Fill in each argument of Struct here...

不过,有一种更简单的单行技术使用 SWI-Prolog 的=..谓词。

于 2012-11-26T23:24:33.883 回答
1

从列表中创建术语的典型方法是使用=..(又名“Univ”)。例如,

turn_into_struct(List, Struct) :-
    Struct =.. [structure|List].

原始问题中“结构”的正确术语是“术语”。

(在其他答案的评论中提到了大学,但我将其重新发布为后代和更高知名度的答案)

于 2012-11-28T15:35:36.660 回答