让我的行为奇怪

she*_*rif 0 haskell let

我有以下程序:

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)并尝试解决问题.很明显aString,现在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"]).


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

  • 谁设置这个考试是非常虐待狂. (5认同)