gpt4 book ai didi

database - SWI-Prolog 列表和递归

转载 作者:搜寻专家 更新时间:2023-10-30 20:20:08 25 4
gpt4 key购买 nike

我有一个数据库看起来像;

airport(ist, 90).
airport(saw, 45).
airport(esb, 60).
airport(adb, 60).
airport(erz, 30).
airport(ayt, 90).
airport(mlx, 30).
airport(tzx, 30).

airplane(f1, ist, [esb,tzx,saw]).
airplane(f2, ist, [mlx,esb,erz,esb]).
airplane(f3, ist, [esb,ist,esb,ist]).
airplane(f4, saw, [ayt,saw,ayt,saw]).
airplane(f5, erz, [esb,erz,esb]).
airplane(f6, mlx, [ist,esb,tzx,saw]).

我有一个名为“testing”的谓词将两个列表作为参数。所以,如果你写 testing([ist],X)。你应该得到 X=[esb,mlx]。我写了这段代码。

testing([],[]).

testing([D|D1],[L|L1]) :-
airport(D,_),
airplane(_,D,[L|_]),
testing(D1,L1).

这有效,输出是:

[8] 60 ?- listConnections([ist],X).
X = [esb] ;
X = [mlx] ;
X = [esb].

但这不是我想要的。所以第一个问题是我需要像 X=[esb,mlx] 这样的单行答案。第二个问题是列表中不应该有重复的元素。我希望我的问题很清楚。任何帮助将不胜感激。

最佳答案

你可以使用setof/3:

testing_set(List, Result) :-
setof(L, testing(List, L), Result).

您可能感兴趣的页面是 this SWI-Prolog documentation page .

请注意,它不返回 [esb,mlx],而是返回 [[esb], [mlx]],但它很容易修复。

关于database - SWI-Prolog 列表和递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10283798/

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