Haskell:具有匿名/ lambda函数的函数组合

Hyb*_*tem 2 haskell functional-programming

在学习功能编程考试时,我从之前的测试中发现了以下问题:

t1 = (reverse . take 2 . words . \ _ -> name)"!"
Run Code Online (Sandbox Code Playgroud)

任务是编写语句的输出.变量名称是指学生的姓名,以"Smith,John"的形式写成.如果我将语句输入WinHugs,我会得到以下输出:

["John","Smith,"]
Run Code Online (Sandbox Code Playgroud)

我理解功能是什么反转,采取和言语正在做什么,我理解如何.操作员连接它们.我不明白的是这里发生了什么:

\ _ -> name
Run Code Online (Sandbox Code Playgroud)

什么是斜线,下划线和"箭头"?另外,引号中的感叹号有什么作用?(没有?)

Stu*_*etz 6

它是一个lambda函数,它丢弃它的(唯一)参数(即"!")和yield name.

作为另一个lambda示例,以下将是一个lambda函数,用于对其参数求平方:

\x -> x * x
Run Code Online (Sandbox Code Playgroud)

\是用于引入lambda函数的符号.

_手段"谁的我们不在乎名称变量".

->lambda函数的参数与用于指定其结果的表达式分开.


ger*_*ter 5

你看到的是一个匿名函数或lambda函数(该名称来自lambda演算).反斜杠告诉您正在启动该功能.下划线说该函数接受一个参数并忽略它.箭头从参数列表指向结果 - 在这种情况下,它最终忽略其参数并返回名称.基本上,\_ -> name是一样的const name.