gpt4 book ai didi

Haskell:初学者函数语法困惑

转载 作者:行者123 更新时间:2023-12-03 15:04:43 24 4
gpt4 key购买 nike

我目前正在尝试学习 Haskell,但我在努力理解语法。例如,取 map功能:

map :: (s -> t) -> [s] -> [t]
map f [] = []
map f (x:xs) = f x : map f xs

我了解该功能的作用,以及 map有一个功能 f :: s -> t作为参数。但我读了 map :: (s -> t) -> [s] -> [t]因为“map 是将函数映射从 s 映射到 t 到 s 再到 t”的函数,这显然是错误的。有人可以帮我解决这个问题吗?

最佳答案

类型(s -> t) -> [s] -> [t]可以通过两种方式阅读。一种方法是将其视为两个参数的函数,第一个是 s -> t 类型的函数第二个是 [s] 类型的列表.返回值的类型为 [t] .

另一种方式是理解函数箭头是右结合的,所以类型等价于(s -> t) -> ([s] -> [t]) .在这种解释下,map是一个从元素到元素的函数s -> t并把它变成一个从列表到列表的函数[s] -> [t] .

同理,在使用函数的时候,可以想到map foo xs应用函数 map两个参数 fooxs .或者,由于函数应用程序是左关联的,您可以将其视为 (map foo) xs , 申请 map到单个参数 foo取回一个新函数,然后将其应用于 xs .

由于 Haskell 函数是 curried , 这些只是看待完全相同事物的两种方式。

关于Haskell:初学者函数语法困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7908356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com