def t[A] = (l:List[A]) => l tail
def r[A] = (r:List[A]) => r reverse
def tr[A] :List[A] => List[A] = t compose r
tr(List(1,2,3,4))
列表(3,2,1)
正如所料。
但不知何故,我试过的每个变体(有几种类型的注释)
def tr = tail compose reverse
失败(未找到 - 值尾)。我错过了一些明显的东西,但我被困住了。
答案 0 :(得分:9)
让我们从后面开始,compose
函数的作用。
它在Function1中定义为def compose[A](g: (A) => T1): (A) => R
和描述
在新的Function1中组合Function1的两个实例,最后应用此函数。
它的作用需要另一个函数g
,取一些类型的参数 - A
,并返回相同的类型T1
。它创建了一个新函数,当被调用时相当于调用f(g(x))
。
您定义的两个功能:
def t[A] = (l:List[A]) => l.tail
def r[A] = (r:List[A]) => r.reverse
它们不带参数,但返回带有列表的函数,并分别对参数调用tail
和reverse
。
你可以这样写:
def t[A](l: List[A]): List[A] = l.tail
def r[A](l: List[A]): List[A] = l.reverse
所以两个函数的组成是t(r(List(1,2,3,4)))
。
tail
或reverse
不是函数,它们是在List
类中定义的方法。必须在一个对象上调用它们,并且你无法做tail(reverse(arg))
。
答案 1 :(得分:2)
compose
是一个函数(即Function1
)组合。
List[T].tail
和List[T].reverse
为List[T]
方法
答案 2 :(得分:1)
示例:
def tr[A] = ((x: List[A]) => x.tail) compose ((x: List[A]) => x.reverse)