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