问题描述
当使用knuth-Morris-Pratt算法时,这是在Scheme中计算故障函数(必须返回几步)的代码:
k > 0
但我不理解{"request":"pois","geometry":{"geojson":{"type":"Point","coordinates":[125.6,10.1]},"buffer":200}}
时的内容。有人可以解释一下吗?
解决方法
我看到您对named let
的语法感到困惑。这个post很好地解释了它的工作原理,但是也许使用更熟悉的语法的示例可以使事情更清楚。以Python中的这段代码为例,它将1到10之间的所有整数相加:
sum = 0
n = 1
while n <= 10:
sum += n
n += 1
print(sum)
=> 55
现在让我们尝试以递归的方式编写它,我将调用函数loop
。这是完全等效的:
def loop(n,sum):
if n > 10:
return sum
else:
return loop(n + 1,n + sum)
loop(1,0)
=> 55
在上面的示例中,loop
函数实现了迭代,参数n
用于跟踪当前位置,参数sum
累积答案。现在,让我们编写完全相同的代码,但是在Scheme中:
(let loop ((n 1) (sum 0))
(cond ((> n 10) sum)
(else (loop (+ n 1) (+ n sum)))))
=> 55
现在,我们定义了一个名为loop
的本地过程,然后使用其参数1
和{{1}的初始值0
和n
自动调用}。当达到递归的基本情况时,我们返回sum
,否则我们将继续调用此过程,并传递参数的更新值。它与Python代码完全相同!不要对语法感到困惑。
在您的算法中,sum
和i-p
是迭代变量,分别被初始化为k
和2
。根据条件为真,当我们再次使用0
和loop
的更新值调用i-p
时,迭代会继续进行,或者在达到k
的情况下,迭代会结束至此,循环退出,计算出的值位于变量(>= i-p n-p)
中。该过程以返回一个称为“故障功能”的新功能结束。