4

わからない-

Prelude> "hi"++"there"
"hithere"
Prelude> "hi":"there"

<interactive>:12:6:
    Couldn't match expected type `[Char]' with actual type `Char'
    Expected type: [[Char]]
      Actual type: [Char]
    In the second argument of `(:)', namely `"there"'
    In the expression: "hi" : "there"
Prelude> 

なぜそれも「ここ」に戻らないのですか?

4

3 に答える 3

12

タイプ。GCHiでこれを試してください:

Prelude> :t (:)
(:) :: a -> [a] -> [a]
Prelude. :t (++)
(++) :: [a] -> [a] -> [a]
于 2012-07-19T21:36:44.420 に答える
6

わかった。最初の演算子は、リストではなく要素である必要があります。

だからもし私がそうしたら、'h':"ithere"それは戻ってくるだろう"hithere"

于 2012-07-19T21:34:20.453 に答える
4

演算子:はリストのコンストラクタの 1 つです。そう"hello"です'h':'e':'l':'l':'o':[]。リストが次のように定義されていると想像できます: (実際の Haskell 構文ではありません)

data List a = (:) a (List a) | []

:要素とリストを取得してリストを作成します。そのため、タイプはa->[a]->[a].

++リストを連結する:ものは、プリミティブとして使用して定義されます。

(++) :: [a] -> [a] -> [a]
(++) []     ys = ys
(++) (x:xs) ys = x : xs ++ ys
于 2012-07-20T00:07:17.297 に答える