Я реализую javascript версию функции накопления-n (упражнение SICP 2.36) Однако, в отличие от схемы, javascript не имеет индикатора nil для массивов, что приводит к дополнительному «неопределенному» значению в выходном массиве. Должен ли я создать новую структуру данных "List", которая имитирует списки Scheme, или есть некоторые приемы, чтобы сделать это с помощью собственных массивов в javascript Вот код, над которым я работаю
const accumulate = (op, init, sequence) => Array.prototype.reduce.call(sequence, op, init)
const map = (fn, sequence) => Array.prototype.map.call(sequence, fn)
const concat = (A, B) => Array.prototype.concat.call([], A, B)
const sum = (a, b) => a + b
const first = (sequence) => {
const [first, ...rest] = sequence
return first
}
const rest = (sequence) => {
const [first, ...rest] = sequence
return rest;
}
const isEmpty = sequence => sequence.length === 0
const accumulateN = (op, init, sequenceOfSequences) => {
if(isEmpty(first(sequenceOfSequences))) return;
return concat(accumulate(op, init, map(first, sequenceOfSequences)), accumulateN(op, init, map(rest, sequenceOfSequences)))
}
log(accumulateN(sum, 0, [[1,2,3], [4,5,6], [5,6,7]]))
//outputs [ 10, 13, 16, undefined ]