gpt4 book ai didi

list - Prolog:如何从复杂术语中提取列表

转载 作者:行者123 更新时间:2023-12-01 12:40:31 24 4
gpt4 key购买 nike

我的任务是扩展一些现有的 Prolog 代码,但我遇到了一个复杂术语的结构问题。这个复杂的术语作为参数传递给我正在编写的 Prolog 谓词。问题是我需要从这个复杂的术语中提取两个列表,而该术语的结构在高级或固定方面是未知的。

具体来说,假设我有一个像这样的术语“Param”:

lam(_G23075,
drs([_G23084], [eq(_G23084, person), ant(_G23084, mask, sg)])+_G23075*_G23084)

上面的 drs 术语有两个我想提取的列表。

如果 Param 只有 drs 术语,我可以这样做:

drs(L1, L2) = Param.

然后 L1 和 L2 将包含列表。这如何与上面给出的复杂期限结构一起工作?

干杯,

马丁

最佳答案

您可以解构术语,例如=..:

以下谓词 extract_drs(+Term,-L1,-L2) 返回两个出现的列表。如果匹配项多次出现,它可能有多个解决方案。

extract_drs(drs(L1,L2),R1,R2) :- !,R1=L1,R2=L2. % the cut avoids that L1 or L2 are inspected
extract_drs(Term,L1,L2) :-
compound(Term), % check if it is a compound term and not a number, variable, etc.
Term =.. [_Functor|Args], % get the arguments of Term
member(Arg,Args), % choose one argument
extract_drs(Arg,L1,L2). % and try to extract there the drs term

关于list - Prolog:如何从复杂术语中提取列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25282654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com