use*_*349 1 haskell function-composition dot-operator
关于点运算符,我有点困惑.我有以下代码(用于测试):
test :: Int -> Int -> Int
test x y = f1 . f2 x y
where f1 n = n+1
f2 x' y' = x' * y'
Run Code Online (Sandbox Code Playgroud)
我认为它将首先执行(f2 xy),然后在该结果上执行f1,但它会抛出错误.谁能告诉我点运算符的确切定义以及等于f1的内容.f2 xy?(在没有点运算符的情况下编写)
最好的问候,Skyfe.
编辑:如果点运算符产生一个完整的新函数,我认为以下代码应该工作:
test :: Int -> Int -> Int
test x y = f1 . f2 x
where f1 n = n+1
f2 x' y' = x' + y'
Run Code Online (Sandbox Code Playgroud)
但是该代码也会返回错误.
在Haskell中,中缀运算符的优先级始终低于函数应用程序,所以这一点
f1 . f2 x
Run Code Online (Sandbox Code Playgroud)
解析这样的
f1 . (f2 x)
Run Code Online (Sandbox Code Playgroud)
但是,f2 x不是类型函数(好吧,如果f2返回一个函数,可能就是这样,但一般来说,或者在你的问题中不是这样).由于(.)作用于函数,因此不起作用.
请改用($)
f1 $ f2 x
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
233 次 |
| 最近记录: |