不久前,一位朋友想要一个可以使用牛顿方法解决函数根源的程序的帮助,当然我需要一些方法来用数字计算函数的导数,这就是我想出的:
deriv f x = (f (x+h) - f x) / h where h = 0.00001
Run Code Online (Sandbox Code Playgroud)
牛顿的方法是一个相当容易实现的方法,它运作得相当好.但现在我开始怀疑 - 我是否可以通过某种方式使用此函数以数字方式求解偏导数,或者是否需要全面的CAS?我会发布我的尝试,但我完全不知道该做什么.
请记住,我是Haskell的新手.谢谢!
我想了解let绑定在Haskell中是如何工作的(或者如果Haskell实现不同,可能是lambda演算?)
我从阅读中理解为你写了一个Haskell,它对单个let绑定有效.
let x = y in e == (\x -> e) y
Run Code Online (Sandbox Code Playgroud)
这对我来说很有意义,因为它与lambda演算中绑定的工作方式一致.我很困惑的地方是使用多个let绑定,其中一个绑定可以引用上面的绑定.我将提供一个简单的例子.
原始代码:
let times x y = x * y
square x = times x x
in square 5
Run Code Online (Sandbox Code Playgroud)
我对实施的猜测:
(\square times -> square 5) (\x -> times x x) (\x -> x * x)
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用,因为times当lambda调用square时没有定义.但是,这可以通过此实现解决:
(\square -> square 5) ((\times x -> times x x) (\x -> x * x))
Run Code Online (Sandbox Code Playgroud)
这是实现此绑定的正确方法,至少在lambda演算中是这样吗?
我目前正在尝试在 Python 中实现fold/ reduce,因为我不喜欢functools. 这自然涉及实现类似 LispCDR函数的东西,因为 Python 似乎没有类似的东西。这是我正在考虑的尝试:
def tail(lat):
# all elements of list except first
acc = []
for i in range(1,len(lat)):
acc = acc + [lat[i]]
Run Code Online (Sandbox Code Playgroud)
这是实现此功能的有效方法吗?我是否缺少某种内置功能?提前致谢!