Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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
Function Haskell电话簿添加元素_Function_Haskell_Insert - Fatal编程技术网

Function Haskell电话簿添加元素

Function Haskell电话簿添加元素,function,haskell,insert,Function,Haskell,Insert,他,伙计们 我的任务是用Haskell编写一个电话簿。因此,给出了电话簿的类型。电话簿将姓名(字符串)映射到其电话号码(字符串)。但是现在我在实现函数“insert”时遇到了问题: 代码如下: type Phonebook = String -> String emptyPhonebook :: Phonebook emptyPhonebook = \_->"" insert :: String -> String -> Phonebook -> Phoneb

他,伙计们

我的任务是用Haskell编写一个电话簿。因此,给出了电话簿的类型。电话簿将姓名(字符串)映射到其电话号码(字符串)。但是现在我在实现函数“insert”时遇到了问题:

代码如下:

type Phonebook = String -> String

emptyPhonebook :: Phonebook
emptyPhonebook  = \_->""

insert :: String -> String -> Phonebook -> Phonebook
insert name number emptyPhonebook = (\name->number)     --is this correct?
insert name number existingPhonebook = ??

我的问题:如何在函数中插入函数?我的意思是,现在我必须在另一个函数(现有电话簿)中插入一个包含函数(名称->号码)的条目,还是我错了?谢谢你的帮助:)

像这样的方法应该可以:

type Phonebook = String -> String

emptyPhonebook :: Phonebook
emptyPhonebook _ = ""

insert :: String -> String -> Phonebook -> Phonebook
insert name number phonebook = 
        case phonebook name of 
             "" -> (\s -> if s == name then number else phonebook s)
             _ -> phonebook

昨天已经提出了这个确切的问题。无论如何,不要用函数来表示它;这似乎令人毛骨悚然。使用映射(结构,而不是函数)。所以你的意思是用列表来解决这个问题。这当然更容易,但我也必须这样解决:(不是列表,而是地图/字典。它们将一个输入与另一个输入关联起来,这就是您在这里尝试做的:将名称与数字关联起来。我看到的第一个问题是,您将电话簿类型作为一个函数。如果我理解您正试图正确执行的操作,电话簿本身不应该是一个函数,每个条目都是一个函数。
Phonebook
应该是一个函数列表。所以你的意思是type Phonebook=[String->String]?啊,只是链接函数。我在JS中这样做了,真不敢相信我在这里没有想到。谢谢Michail,但我不理解变量s。你没有初始化它,所以你怎么能将它与字符串名进行比较?@JohnDoe
s
将是结果函数的参数,所以当你调用
nonEmptyPhonebook“John”
它将被替换为“John”。好的,我明白了。我如何测试它?使用“insert”John““12345”emptyPhonebook”进行测试时会出现以下错误:“(显示电话簿)没有实例由于使用“print”@JohnDoe,您需要将新电话簿保存到一个变量中,然后用一些参数调用它。由于电话簿实际上是一个函数,您不能直接打印它,但可以打印它的返回值。