2015-09-14 61 views
1

我想刷新我的線性代數技巧,也在學習哈斯克爾和思想......爲什麼不通過另一個做一個學習! (二鳥一石)哈斯克爾陣列減法

-- Vector 

a = [1,0,0] 
b = [2,0,4] 

subTwoLists (x:xs) (y:ys) = (x-y) : (subTwoLists xs ys) 

我很想了解:

  • (x:xs)(y:ys):這些只是意味着在所有的元素,在b的所有元素?

  • = (x-y):應該計算a[0] - b[0] = c[0],對不對?

+0

可憐的鳥......不是素食主義者的帖子... –

回答

4

沒有與此代碼的問題:

subTwoLists :: Num a => [a] -> [a] -> [a] 
subTwoLists (x:xs) (y:ys) = (x-y) : (subTwoLists xs ys) 

你沒有處理基本情況。在遞歸中,你總是必須 處理基本情況。像這樣的東西應該工作:

subTwoLists :: Num a => [a] -> [a] -> [a] 
subTwoLists [] _ = [] 
subTwoLists _ [] = [] 
subTwoLists (x:xs) (y:ys) = (x-y) : (subTwoLists xs ys) 

難道這些僅僅是指在一個所有元素和B中的所有元素?

是。但是你爲什麼不用ghci自己嘗試一下呢?

(x-y):應該計算a [0] - b [0] = c [0]對嗎?

是。

此外,請注意,您使用的是Lists,而不是數組。

+0

謝謝! 這實現了什麼? : subTwoLists :: Num a => [a] - > [a] - > [a] – Genesis

+1

@Genesis它是一個類型簽名,告訴函數subTwoLists接受兩個列表作爲輸入,並給出一個列表作爲輸出。通常,書寫類型簽名不是強制性的,但它在閱讀代碼時有很大幫助。 – Sibi

+0

[a] - > [a] - > [a] - > [a]這會接受3個列表並輸出一個列表嗎? – Genesis