Я пытаюсь написать функцию, которая принимает операцию и матрицу, чтобы превратить матрицу в вектор. Например, если я позвонил (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
ответ
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
Можно также использовать '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)
Так же применяется «применить» карту и операция по каждому списку в пределах список? – kmgauthier
Да, в этом случае 'apply' применяет' map', используя в качестве параметров операцию и все подписи. Если подсписки не были внутри самого списка, мы могли бы сделать это: '(map + '(1 2 3 4)' (5 6 7 8))'. Помните, что 'map' получает в качестве параметров операцию и один или несколько списков, если передано более одного, операция применяется по ним по элементам. –