我们目前正在处理一项来自大学的任务,我们还不完全理解(请不要解决方案,只有想法或建议)。
给出的是一种类型:
type MyType = String -> String
现在我们正在尝试有一个函数,它接受2个字符串和一个函数(类型),然后给出一个函数的
myCode :: String -> String -> MyType -> MyType
我们已经实现了一个功能,可以用作MyType one:
emptyString :: MyType
emptyString :: (a -> "")
任务是能够存储几个2x字符串。这是我们目前的想法:
myCode :: String -> String -> MyType ->MyType
myCode a b c = (x -> b)
在这种情况下,我们有一个输入字符串,它是"Hello",另一个是"World",然后作为c,我们放入"emptyString"。这适用于一个字符串,因为当我们在控制台中键入以下内容时:
a = (myCode "Hello" "World" emptyString) ""
我们在输入"a"上得到"世界"。现在最困难的部分是:我们应该能够存储其中的几个(搜索它们是另一项任务,现在不需要)。我们认为现在可以在声明另一个变量时使用"a":
b = (myCode "1" "2" a) "Hello" "World" emptyString "")
这将在"b"中调用另存为"a"的函数,并在其中调用"emptyString"。正如你可能已经猜到的那样——它不起作用!从现在开始,我们真的不知所措。
当你到达这一部分时,意味着你花了时间来理解我们对任务的复杂解释——非常感谢。
感谢您的建议和帮助!
从评论中amalloy链接的问题来看,您似乎正在尝试基于类似延续传递风格的范式构建一个电话簿。
基本上,你的类型应该发生什么
myCode :: String -> String -> MyType -> MyType
您将生成一段类型为MyType
的数据dat = myCode a b pb
。因此,您可以使用s :: String
查询dat
,它将输出另一个String
。在dat s
的操作中,如果将其扩展到定义
dat s = myCode a b pb s
您可以访问三个字符串,a
、b
以及pb s
返回的任何字符串。您将递归地构建功能,可以使用a
b
和s
做一些事情,也可以将其推到pb
,让continuation处理它。
希望这能有所帮助,不要泄露太多信息。