当前位置: 首页 > 知识库问答 >
问题:

Haskell:理解与lambda函数一起使用时的map函数

边浩波
2023-03-14
map (\f x -> f x 5) [(-),(+),(*)]
map (\f x -> f 5 x) [(-),(+),(*)]
map ($ 5) [(-),(+),(*)]

(1)-x5=(-x)5

(2)+x5=(+x)5

(3)*x5=(*x)5

共有1个答案

胡弘毅
2023-03-14

(-5)5会出现错误,因为前缀减是语言语法中的一个特例:(-5)表示减去5的数字,而不是减去5的函数(另请参见:Currying减法)。因此,我将重点讨论(+)的情况,这并不例外。

在第二个表达式map(\f x->f 5 x)[(-),(+),(*)]中,结果列表的第二个元素是:

(\f x -> f 5 x) (+)

当用手评估这样的事情时,重要的是要小心不要混淆运算符的前缀、中缀和分段用法。这里的应用程序给出...

\x -> (+) 5 x  -- Prefix syntax (note the parentheses around the operator)

...相当于...

\x -> 5 + x  -- Infix syntax

.并:

\x -> (5 +) x  -- Left section
\x -> (+ x) 5  -- Right section

(5 +)          -- Left section, pointfree
 类似资料:
  • 将函数应用于迭代的每一项,并返回结果列表。如果传递了额外的可迭代参数,函数必须接受这么多参数,并并行应用于所有迭代的项。 如果一个迭代比另一个迭代短,则假定它是用无项扩展的。 如果函数是,则假定身份函数;如果有多个参数,返回包含所有迭代中相应项的元组组成的列表(一种转置操作)。 可迭代参数可以是序列或任何可迭代对象;结果总是一个列表。 这在制造笛卡尔积时扮演什么角色? 把元组放在任何地方都有什么效

  • 问题内容: 这是我尝试在其上使用该函数的循环: 有办法吗?如果不是参数,那将是微不足道的,但是我不确定如何处理。 问题答案: 用途: 创建一个新的可调用对象,除了传递给该新的可调用对象的内容之外,该参数还将对包装的函数应用所有参数(包括关键字参数)。

  • /*在res.data*/async componentDidMount(){await axios.get()中具有title as属性。然后((res)=>{const persons=res.data;this.setstate({user:persons.data.title,s:“4”});console.log(this.state.user);});}componentDidUpda

  • 我需要制作两个lambda函数,一个用参数调用另一个,被调用的函数将参数打印出来。我很难让它工作:第一个函数: 请告知我应该在被调用函数中输入什么代码才能接收参数“hello Jenny”?非常感谢。

  • 函数在Haskell中起主要作用,因为Haskell是一种函数式编程语言。与其他语言一样,Haskell确实具有自己的函数定义和声明。 函数声明由函数名称,其参数列表以及其输出组成。函数定义是实际定义函数的地方。让我们看看一个添加函数的示例,以详细了解此概念。 在这里,在第一行中声明了函数,在第二行中,我们编写了实际的函数,该函数将带有两个参数并产生一个整数类型的输出。 与大多数其他语言一样,Ha

  • 问题内容: 我想确保数据库中是否存在临时表。 我尝试使用函数,但似乎无法将其用于临时表。 我该如何解决这个问题? 问题答案: 使用 在另一个数据库的上下文中运行时获取临时表的ID。