我有以下程序:
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"]) -}
Run Code Online (Sandbox Code Playgroud)
为什么忽略"否",做let no n= name;in no什么?
gsp*_*spr 12
这是非常疯狂编写的代码.让我们一点一点地解决它.
首先,t1是一个类型的元组(a,b,c).让我们写下来t1 = (x,y,z)并尝试解决问题.很明显a是String,现在x是"p1".
第二个组件是((take 2) . tail) mnr,这是take 2 [1,2,3,4,5,6],这是[1,2].所以bIS [Int],和y是[1,2].说得通.
第三个组成部分是奇怪的.首先,
let no n = name in no
Run Code Online (Sandbox Code Playgroud)
简单地定义一个函数\n -> name,即返回常量函数name.这写得更好const name.所以你有了这个组合(take 3) . words . (const name),并将它应用于"No".好吧,(const name) "No"显然只是name,即"Max Mustermann".所以words适用于此 ["Max", "Mustermann"],然后再take 3获得前三个元素["Max", "Mustermann"].这是z上面的,并表明c是[String].
总而言之,你最终t1拥有了类型(String, [Int], [String])和价值("p1", [1,2], ["Max", "Mustermann"]).
应该清理第三个组件的代码,但是如何清理它取决于你真正想要做什么.然而,就目前而言,它非常复杂,只会让你和其他人感到困惑.