gpt4 book ai didi

prolog - Prolog 中的 "outer join"相当于什么?

转载 作者:行者123 更新时间:2023-12-03 23:51:23 25 4
gpt4 key购买 nike

说我有一个 Prolog 数据库

person(john).
person(jane).
person(mike).

favourite_icecream(john,strawberry).
favourite_icecream(jane,choc_chip).

favourite_colour(jane,green).
favourite_colour(mike,red).

我怎样才能获得等效的外连接来获得一系列结果,例如
john, strawberry, _
jane, choc_chip, green
mike, _, red

最佳答案

您可以通过以下方式近似(特定)SQL 查询的行为:

?- person(P),(favourite_icecream(P,I)->true;I='?'),(favourite_colour(P,C)->true;C='?').
P = john,
I = strawberry,
C = ? ;
P = jane,
I = choc_chip,
C = green ;
P = mike,
I = ?,
C = red.

显然,这不是一个非常有吸引力的语法……对于特定的用例可以做得更好,但是概括的努力可能不值得。

正如丹尼尔所建议的那样,Prolog 思维模式(面向元组)与 SQL(面向记录集)不同。

编辑

我的答案需要改进:假设一个人有更多的偏好。只是说,将数据库更改为
...
favourite_icecream(john,strawberry).
favourite_icecream(john,lemon).
...

上面的查询只会产生第一个偏好。使用所谓的 soft-cut而不是 if-then-else我们可以更好地为外连接建模:
outer_join(P,I,C) :-
person(P),
(favourite_icecream(P,I)*->true;I='?'),
(favourite_colour(P,C)*->true;C='?').

关于prolog - Prolog 中的 "outer join"相当于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57211386/

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