【问题标题】:Haskell - have a function call a functionHaskell - 有一个函数调用一个函数
【发布时间】:2017-01-20 18:36:54
【问题描述】:

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

给出的是一个类型:

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

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

这将在“b”中调用保存为“a”的函数,并在其中调用“emptyString”。 正如您可能已经猜到的那样 - 它不起作用!从现在开始,我们真的很茫然。

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

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

【问题讨论】:

  • 什么是“商店”?什么是“2x 字符串”?
  • 这是对Phonebook 练习的混淆吗?
  • 看起来和最近的问题stackoverflow.com/questions/41753366/…的作业一样
  • a 指的是单个字符串,而不是函数。在与b 的绑定中,它不是myCode 的有效参数。即使是这样,myCode 的结果也是MyType 类型的值,它适用于 one 值,而不是 4。您似乎对函数的定义方式和应用了,这使得破译你想要做什么变得非常困难。

标签: function haskell lambda anonymous-function


【解决方案1】:

从 cmets 中 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 返回的任何内容。您将递归地构建功能,或者通过对a bs 执行某些操作,或者将其推到pb 的路上,让延续处理它。

希望这会有所帮助,但不要放弃太多。

【讨论】:

  • 很容易猜到这个任务 - 一定是一个常见的:) 非常感谢你的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多