Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 与无点样式代码混淆_Haskell_Pointfree - Fatal编程技术网

Haskell 与无点样式代码混淆

Haskell 与无点样式代码混淆,haskell,pointfree,Haskell,Pointfree,因此,一个将列表中的元素复制给定次数的函数如下所示 rep :: Int -> [a] -> [a] rep = concatMap . replicate 根据定义(f.g)x=f(g(x))但是 (concatMap(replicate 4“abc”)的工作原理与(concatMap.replicate)4“abc”的工作原理不同。事实上,它根本不起作用。concatMap的第一个参数必须是function。我被这弄糊涂了。无点版本是如何工作的?有人能解释一下吗?你说得对,(f

因此,一个将列表中的元素复制给定次数的函数如下所示

rep :: Int -> [a] -> [a]
rep = concatMap . replicate
根据定义
(f.g)x=f(g(x))
但是


(concatMap(replicate 4“abc”)
的工作原理与
(concatMap.replicate)4“abc”的工作原理不同。事实上,它根本不起作用。concatMap的第一个参数必须是function。我被这弄糊涂了。无点版本是如何工作的?有人能解释一下吗?

你说得对,
(f.g)x=f(gx)
,但这并不意味着
(concatMap.replicate)4“abc”=concatMap(replicate 4“abc”)
。相反,它意味着
(concatMap.replicate)4“abc”=concatMap(replicate 4)“abc”
,这是真的。

我想我在提问之前必须盯着类型签名看更长的时间
replicate::Int->(a->[a]),concatMap::(a->[b])([a]->[b])
因此,为了匹配输入和输出,Haskell首先部分应用replicate 1参数。是这样吗?@Dulgunlst,不完全是这样。Haskell本身不适用任何东西。在这里工作的只是定义良好的应用程序规则。您刚刚编写了
replicate
返回
(a->[a])
concatMap
接受
(a->[b])
。这些类型是统一的(即假定
b
等于
a
),并且根据
()
定义,您得到
Int->([a]->[a])
类型的函数,这当然是
Int->[a]->[a]
-您问题中的
rep
类型。