Prolog 序言:从列表的元素生成函子项

Prolog 序言:从列表的元素生成函子项,prolog,Prolog,我需要给谓词一个列表,并从中得到一个包含该列表元素的术语 所以我想说: turn_into_struct(+List, -Term). 我确实考虑过的一件事是对列表中的每个元素递归使用nb_setarg/3,但这种方式我需要用一个特定的算术来实例化这个术语,我找不到如何做到这一点。你可以先找到列表的长度,用伪值构造新的术语,然后递归或通过回溯(例如使用findall)填充每个参数。如果你需要,我会补充更多细节(只要我没有破坏你自己的努力) 但是,有一种更简单的单行技术,使用SWI Prolog

我需要给谓词一个列表,并从中得到一个包含该列表元素的术语

所以我想说:

turn_into_struct(+List, -Term).

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

你可以先找到列表的长度,用伪值构造新的术语,然后递归或通过回溯(例如使用
findall
)填充每个参数。如果你需要,我会补充更多细节(只要我没有破坏你自己的努力)


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

从列表中创建术语的典型方法是使用(也称为“Univ”)。比如说,

turn_into_struct(List, Struct) :-
    Struct =.. [structure|List].
原问题中“struct”的恰当术语是“term”


(关于其他答案的评论中提到了大学,但我将其转载为对后代和更高知名度的回答)

这是家庭作业吗?(如果是这样的话,那么我将避免透露太多信息:-)是的,这是一个家庭作业,但它是一个具体的、与语言相关的问题。好吧,我想问题是,你是否允许重用
=…
,或者你的家庭作业是使用其他谓词重新创建完成相同工作的东西?家庭作业更复杂。你没有破坏任何东西,我可以向你保证:)
=…
成功了,谢谢。
函子
谓词也很好知道。
turn_into_struct(List, Struct) :-
    Struct =.. [structure|List].