我对该const功能的一个特定示例感到困惑。因此类型声明声明const :: a -> b->a该函数接受两个类型为aand 的参数b并返回一个类型a。例如:
const 5 3 => 5
const 1 2 => 1
Run Code Online (Sandbox Code Playgroud)
根据声明,这是有道理的。但是,我遇到了这个特定的例子:
const (1+) 5 3 => 4
Run Code Online (Sandbox Code Playgroud)
这让我质疑我对函数声明的理解。我知道这个函数只需要两个参数,因为我试过:
const 1 5 3
Run Code Online (Sandbox Code Playgroud)
现在这让我放心,它只需要 2 个参数。那么这是如何工作的呢?是(1+)不是参数?如果不是,那是什么?
const (1+) 5 3 => 4
Run Code Online (Sandbox Code Playgroud) 这是我第一次学习函数式编程。我确实理解简单的 beta 减少是如何工作的。
例如:
(\x->2*x)5
Run Code Online (Sandbox Code Playgroud)
意味着您将 xs 替换为 5。
2*5=10
Run Code Online (Sandbox Code Playgroud)
然而,其他例子让我感到困惑
(\f->f(f 0))(\x->x+1)
Run Code Online (Sandbox Code Playgroud)
我们已经了解了一些评估策略,头范式和弱头范式。
从我的笔记中,我明白头部范式意味着没有 redex 表达式,而弱头部范式意味着存在 lambda 抽象。
这对我来说没有任何意义。两者之一是否适用于最后一个示例?如果是这样,其他策略的例子是什么?
haskell ×2