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)書いて、物事を理解してみましょう。それがであり、であるのaはかなり明らかです。Stringx"p1"

2番目のコンポーネントは((take 2) . tail) mnr、です。take 2 [1,2,3,4,5,6]つまり、です[1,2]。です、そしてbです。理にかなっています。[Int]y[1,2]

3番目のコンポーネントは奇妙に書かれています。初めに、

let no n = name in no

単純に関数\n -> nameを定義します。つまり、定数関数はを返しnameます。これは、よりうまく記述されていconst nameます。つまり、構成(take 3) . words . (const name)があり、それをに適用します"No"。まあ、(const name) "No"明らかにただname、すなわち"Max Mustermann"。したがって、これwordsに適用されるのは ["Max", "Mustermann"]、でありtake 3、最初の3つの要素を取得します。これもです["Max", "Mustermann"]。それzは上にあり、それがであることを示していcます[String]

全体として、t1タイプ(String, [Int], [String])と値を持つことになります("p1", [1,2], ["Max", "Mustermann"])


3番目のコンポーネントのコードはクリーンアップする必要がありますが、クリーンアップする方法は、実際に何をしたいかによって異なります。しかし、現在のところ、それは非常に複雑であり、あなたや他の人を混乱させるだけです。

于 2013-03-01T09:29:28.287 に答える