0

我有以下程序:

mnr = [0,1,2,3,4,5,6]  :: [Int]
name = "Max Mustermann" :: String
kzn = "e53X" :: String

t1 = ("p1",(take 2.tail)mnr, (take 3.words.(let no n= name;in no))"No");
{-result: t1 == ("p1",[1,2],["Max","Mustermann"]) -}

为什么“否”会被忽略,有什么作用let no n= name;in no

4

1 回答 1

11

这是相当疯狂的编写代码。让我们尝试一块一块地解决它。

首先,t1是一个类型的元组(a,b,c)。让我们写下来t1 = (x,y,z),试着弄清楚。很清楚aStringx"p1"

第二个组成部分是((take 2) . tail) mnr,这是take 2 [1,2,3,4,5,6],这是[1,2]。如此,如此。b_ 说得通。[Int]y[1,2]

第三部分写得很奇怪。首先,

let no n = name in no

简单地定义了一个函数\n -> name,即返回的常量函数name。这写得更好const name。这样你就有了构图(take 3) . words . (const name),然后你把它应用到"No". 嗯,(const name) "No"显然只是name,即"Max Mustermann"。所以words应用到 this is ["Max", "Mustermann"],然后take 3得到前三个元素,这又是["Max", "Mustermann"]。这就是z上面,并表明它c[String].

总而言之,你最终t1拥有 type(String, [Int], [String])和 value ("p1", [1,2], ["Max", "Mustermann"])


应该清理第三个组件的代码,但是如何清理它取决于您以后真正想做的事情。然而,就目前而言,它非常复杂,只会让你和其他人感到困惑。

于 2013-03-01T09:29:28.287 回答