2017-01-20 32 views
0

我们目前正在从大学来完成一项任务,我们并没有完全理解(请解决方案,但只有想法或建议)。Haskell - 有一个函数调用函数

什么是给出一个类型:

type MyType = String -> String 

现在,我们正在努力能够有一个功能,这需要2个字符串和函数(类型),然后给出一个函数(类型)

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

,我们已经实现了一个功能,它可以作为一个MyType的:

emptyString :: MyType 
emptyString :: (\a -> "") 

助教sk应该能够存储几个2x字符串。这是我们目前的想法:

myCode :: String -> String -> MyType ->MyType 
myCode a b c = (\x -> b) 
在这种情况下

我们有一个输入字符串是“你好”,另一个是“世界”,然后为c我们把在“emptyString”。 这适用于一个字符串,因为当我们键入控制台以下:

a = (myCode "Hello" "World" emptyString) "" 

我们得到了“世界”上输入“A”。现在最困难的部分是:我们应该能够存储其中的几个(搜索它们是另一个任务,现在不需要)。我们认为声明另一个变量的时候,我们也许可以用“一”现在:

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

这就需要在“B”另存为“A”,并在此的“emptyString”的功能。正如你可能已经猜到 - 它不工作!而且我们对如何继续从现在开始真的感到不知所措。

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

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

+1

什么是“商店”?什么是“2x字符串”? –

+2

这是对“电话簿”练习的混淆吗? –

+1

它看起来像最近的问题一样的任务http://stackoverflow.com/questions/41753366/identifying-input-values-for-which-a-function-does-not-generate-a-specific-outpu – amalloy

回答

1

从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回报。您将通过使用abs或者将其推向pb的方式进行递归来构建功能,让延续处理它。

希望这可以帮助不要太多。

+0

如此容易猜测的任务 - 必须是一个常见的:)非常感谢您的帮助 – Fapprentice