小编Ben*_*ero的帖子

Haskell中的部分导数

不久前,一位朋友想要一个可以使用牛顿方法解决函数根源的程序的帮助,当然我需要一些方法来用数字计算函数的导数,这就是我想出的:

deriv f x = (f (x+h) - f x) / h where h = 0.00001
Run Code Online (Sandbox Code Playgroud)

牛顿的方法是一个相当容易实现的方法,它运作得相当好.但现在我开始怀疑 - 我是否可以通过某种方式使用此函数以数字方式求解偏导数,或者是否需要全面的CAS?我会发布我的尝试,但我完全不知道该做什么.

请记住,我是Haskell的新手.谢谢!

haskell calculus

7
推荐指数
2
解决办法
361
查看次数

Haskell在lambda演算中`let`绑定

我想了解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演算中是这样吗?

recursion haskell lambda-calculus let letrec

4
推荐指数
1
解决办法
307
查看次数

Scheme/Lisp CAR 和 CDR 函数的 Python 等效项

我目前正在尝试在 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)

这是实现此功能的有效方法吗?我是否缺少某种内置功能?提前致谢!

python higher-order-functions

1
推荐指数
1
解决办法
2231
查看次数