gpt4 book ai didi

prolog - 学习序言

转载 作者:行者123 更新时间:2023-12-02 11:34:12 24 4
gpt4 key购买 nike

我正在尝试学习 Prolog,但将我的编程知识转换为这种语言有一个很大的问题。我无法解决真正的新手问题。

例如我有这个

a(b(1)).
a(b(2)).
a(b(3)).
a(b(4)).
a(b(6)).

如果 Y 是偶数,练习希望打印(使用 writeln(X))所有 b(Y)。

如果我没记错的话,我可以用这个来判断它是否是偶数

a(b(X)) mod 2 =:= 0

但我不明白如何检查它并打印所有数字。

最佳答案

prolog 中一个非常基本的概念是模式匹配
有很多教程对此进行了解释,例如 this一个
您可能还想查看第二章的第一章和其余部分。

我真正喜欢序言的原因之一是我只写我想要的内容:

我想打印所有具有特定属性的 X。
让我们先描述一下属性。

X 具有属性如果它属于数据库是偶数

has_attribute(X):-
belongs_db(X),
is_even(X).

如果存在子句 a(b(X)),则 X 属于数据库

belongs_in_db(X):-
a(b(X)).

即使与 2 除的余数为 0,X 也是偶数:

is_even(X):-
0 =:= X mod 2.

现在我们可以询问 has_attribute(X),prolog 将回复,列出每个 X。但我们希望所有 X. 都这样做,我们将使用 findall/3 谓词找到所有具有我想要的属性的 X 并将它们放入列表中

findall(X,has_attribute(X),List).

现在我们有了列表中的所有 X,我们想要打印它们一个简单的方法是只使用 writeln/1:

writeln(List)

所以,最后:

run:-
findall(X,has_attribute(X),List),
writeln(List).

has_attribute(X):-
a(b(X),
0 =:= X mod 2.

另一方面,您可能想以其他方式打印数字。为此,您应该使用 recursion

如果列表为空,我就完成了

my_print_list([]).

如果列表有 haed 和 tail,我将打印第一个元素,然后打印 tail:

my_print_list([Head|Tail]):-
writeln(Head),
my_print_list(Tail).

关于prolog - 学习序言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5920450/

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