3 haskell functional-programming key-value
我试图了解类型同义词以及如何实际使用它们。
这是类型的同义词:
empty = const Nothing
type KVS a b = a -> Maybe b
Run Code Online (Sandbox Code Playgroud)
我想制作一个函数,KVS以使用以下代码插入一对:
insert k v kvs = \k' -> if k' == k then Just v else kvs k'
Run Code Online (Sandbox Code Playgroud)
我对这段代码的疑问是:
k'在lambda?它代表什么?if k' == k检查?我不明白的概念Just和Maybe,但代码这个特殊的一块是我无法绕到我的头。
关于函数式编程的解释会很好。
- 什么是
k'在lambda?它代表什么?
在这里,您的映射只是一个将键映射k到Maybe v(值)的函数。因此,k'在情况下,我们执行查找参数。
请注意,正如@AJFarmar所说,单引号(')也可以用作标识符的一部分,这与某些(大多数)语言仅将其用作字符文字的一部分不同。正如Haskell'10报告对词法结构所说的那样:
标识符包含一个字母,后跟零个或多个字母,数字,下划线和单引号。
由于它模仿素数[wiki],因此经常使用,它在数学中用于以下用途:
在数学中,素数通常用于为相似的事物生成更多的变量名,而无需使用下标– x?。
- 它从哪里获得价值?
该insert不会传值k'。我们简单地构造一个新函数,将键映射k'到一个Just v与键相同的情况(如果键与我们添加的键相同)k,或者如果键不保留,则调用原始映射(以在“旧”映射中进行查找) 。
该empty地图是一个const Nothing,东西映射的一切Nothing,这样就意味着,无论是我们的查找,我们将始终检索Nothing,这的确是一个空的地图是应该做的。
k' == k检查的条件是什么?
如果进行查找,它将检查我们查找的键是否与(k, v)我们刚刚插入的键值对的键相同。如果成立,我们将返回a Just v,否则,我们将调用旧地图。