Haskell - 有一个函数调用一个函数

Haskell - have a function call a function

我们目前正在处理大学的一项任务,我们还没有完全理解(请不要解决方案,只提供想法或建议)。

给出的是类型:

type MyType = String -> String

现在我们正在尝试能够拥有一个函数,它接受 2 个字符串和一个函数(类型),然后给出一个函数(类型)

myCode :: String -> String -> MyType -> MyType

而且我们已经实现了一个函数,可以作为MyType的一个:

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" 上得到 "World"。现在是困难的部分:我们应该能够存储其中的几个(搜索它们是另一项任务,现在不需要)。我们认为我们现在可以在声明另一个变量时使用 "a":

b = (myCode "1" "2" a) "Hello" "World" emptyString "")

这将在 "b" 中调用保存为 "a" 的函数,并在其中调用 "emptyString"。 您可能已经猜到了 - 它不起作用!而我们现在真的很茫然,不知如何继续下去。

当你到达这一部分时,意味着你花时间理解了我们对任务的复杂解释 - 非常感谢。

提前感谢您的建议和帮助!

从评论中 amalloy 链接的问题来看,您似乎正在尝试基于类似范式的连续传递样式来构建电话簿。

基本上,您的类型应该发生什么

myCode :: String -> String -> MyType -> MyType

就是你要生成一条数据dat = myCode a b pb,类型是MyType。因此,您可以使用 s :: String 查询 dat,它会输出另一个 String。在dat s的运算中,如果展开到定义,

dat s = myCode a b pb s

您可以访问三个字符串,ab 以及任何 pb s returns。您将递归地构建功能,或者通过使用 a bs 做一些事情,或者将它推到 pb,让延续处理它。

希望这对您有所帮助,但不要透露太多。