2017-02-12 48 views
0

我正在嘗試編寫一個函數,該函數需要一個操作和一個矩陣將矩陣轉換爲向量。例如,如果我打電話給(matrix-to-vector + ((1 2 3 4) (5 6 7 8))),它會返回(6 8 10 12),來自(1+5 2+6 3+7 4+8)。矩陣輸入是一個NxM矩陣,操作是一個雙參數運算符(如+ - * /或string-append)。它使用運算符將​​矩陣的每一列的元素組合在一起,從而返回大小爲M的矢量。我有一種感覺映射在這裏會有所幫助,但我不確定如何實現它。我會將操作映射到矩陣列中的每個元素以獲得結果向量。函數通過應用給定的操作將矩陣轉換爲矢量

回答

0

A map將做的伎倆,懷疑。唯一的其他東西要考慮的是,你應該使用apply,因爲輸入列表的列表:

(define (matrix-to-vector op lst) 
    (apply map op lst)) 

例如:

(matrix-to-vector + '((1 2 3 4) (5 6 7 8))) 
=> '(6 8 10 12) 
+0

所以不適用「應用」映射和操作中的每個列表清單? – kmgauthier

+0

是的,在這種情況下,'apply'使用'map'作爲參數操作和所有子列表。如果子列表本身不在列表中,我們可以這樣做:'(map +'(1 2 3 4)'(5 6 7 8))''。請記住,'map'接收一個操作和一個或多個列表作爲參數,如果傳遞了多個列表,則操作以元素方式應用於它們。 –

0

人們也可以以更簡單的方式,如果一個使用'map'分離構成該矩陣的列表:

(map + '(1 2 3 4) '(5 6 7 8)) 

輸出:

'(6 8 10 12) 

它也將有超過2只列出了一個N * M的矩陣工作:

(map + '(1 2 3 4) '(5 6 7 8) '(10 20 30 40)) 

輸出:

'(16 28 40 52)