gpt4 book ai didi

序言。两个变量同名

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

my_reverse(L1,L2) :- my_rev2(L1,L2,[]).

my_rev2([],L2,L2).
my_rev2([X|Xs],L2,Acc) :- my_rev2(Xs,L2,[X|Acc]).

嗨,

第二行有两个相同名称的变量是什么意思?

最佳答案

我想“第二行”你的意思是“第三行”,所以我们正在讨论这个子句:

my_rev2([], L2, L2).

这是 my_rev2/3 的第一个子句,对吗?

那么同一个变量在子句头部出现两次意味着什么?附带问题:第一个参数是 [] 是什么意思?在子句标题中?

如果您首先引入新的变量,然后使所有统一显式,那么这一切都会变得清晰。我们可以将子句写成如下:

my_rev2(Ls, L1, L2) :- Ls = [], L1 = L2.

现在很清楚了:my_rev(Ls, L1, L2)成立如果 Ls = [] L1 = L2 。当然,没有必要这么冗长,所以我们可以简单地将这样的统一直接拉到子句头部!

这听起来可能很微不足道,但事实上你的问题是一个非常好的问题:我见过许多初学者没有将这种统一放入子句头部,不必要地使他们的代码复杂化,同时时间(这通常是齐头并进的)也会降低效率。

<小时/>关于风格的一个小注释:我建议让表示列表的变量名称以“s”结尾,类似于常规的英语复数形式。此外,在辅助谓词的名称后面附加下划线 ( _ ) 通常很有用。因此,我会写出类似于以下内容的初始事实:

reverse_([], Ls, Ls).

当然,这在语义上等同于:

reverse_([], As, Bs) :- As = Bs.

关于序言。两个变量同名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37309934/

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