2013-01-04 20 views
-2

尾巴可能重複:
Where does the name 「xs」 for pattern matching come from?代表在Haskell

我學習Haskell。這裏是計算總和的函數

sum' :: (Num a) => [a] -> a 
sum' [] = 0 
sum' (x:xs) = x + sum' xs 

我想不通xs的意思。 x - 是頭部,xs - 是尾部。但是它寫的是xs而不是隻是x或s?

+1

見http://stackoverflow.com/questions/13701099/where-does-the-name-xs-for-pattern-matching-come-from – shang

+0

我不是詢問爲什麼稱爲xs(而不是ca或xw或bq)。我在詢問究竟是什麼意思,或者它是如何工作的?我想應該只有一個字符。 –

+0

這只是一個變量名稱。它可以是命名規則允許的任何事情。你可以閱讀關於一般模式匹配的語法,例如:http://learnyouahaskell.com/syntax-in-functions#pattern-matching – shang

回答

6

xxs只是變量名;例如,您可以使用fredwilma。但是,將名單x和尾部xs(發音爲exes)稱爲x是單個元素,而xs可能包含多個元素,這很常見。

你給出的例子使用模式匹配,這是一個漂亮的功能。該生產線

sum' (x:xs) = x + sum' xs 

基本上說「坐輸入參數總結」,並且第一個元素後,它分割。調用的第一個元素x和列表xs的休息」。到這將是基本相當:

sum' list = x + sum' xs 
    where x = head list 
      xs = tail list 
+0

我很困惑,因爲我認爲由於某些原因,xs有2個變量。 –

+0

'xs'是一個單一的變量,但它是一個元素列表,而'x'只是一個元素。給你一個具體的例子,如果'(x:xs)'是'「hello」',那麼'x'是''h'','xs'是'「ello」'。 – mhwombat