После изучения большей части The Little Schemer, я пытался использовать некоторые рекурсивные решения для задач Coderbyte.«Сопоставление» маленького алгоритма с вызовом coderbyte: заглавная
После некоторого ворча я бросил минусы и подумал, что мой upperConsIt будет работать, чтобы просмотреть массив, найти все экземпляры конкретной буквы и загладить каждый из них. В конечном счете, у меня будет массив, который я могу преобразовать в строку с той буквой, которая теперь заглавная.
Thee ERROR появляется, когда я пытаюсь использовать shift(), как cdr. Почему это? Что мне нужно сделать, чтобы работать с JavaScript рекурсивно в этом случае?
'use strict';
var newArray = [];
var originalText = 'i will eat my sausage if i can';
var arrayToProcess = textIntoArray(originalText);
function cons(a, d) {
return [a, d];
}
function textIntoArray(string) {
return string.split('');
}
function upperConsIt(array, letter) {
return array[0] === null ? null :
array[0] === letter ? cons(array[0].toUpperCase(), upperConsIt(array.shift(), letter)) :
cons(array[0], upperConsIt(array.shift(), letter));
}
upperConsIt(arrayToProcess, 'i');
console.log(arrayToProcess);
phantom.exit();
Вот выход ошибки:
TypeError: undefined is not a constructor (evaluating 'array.shift()')
Я просто не понимаю, как это ошибка типа. Массив должен быть массивом, правильно?
Я вижу. Итак, действительно нет эквивалента для cdr в только что встроенном JavaScript. –
@GabrielKunkel Вы имеете в виду встроенный 'cdr', который соответствует вашей выбранной реализации' cons'? Вы могли бы легко реализовать пары с объектами и 'car',' cdr' как методы. (Я бы предпочел это) BTW. JavaScript имеет 'map' как метод для массивов, но он не использует пары. – Sylwester
Я понимаю. Маленький Schemer помог мне полностью понять рекурсию, но он не переводится на JavaScript без создания библиотеки эквивалентов. В принципе, вы не можете смешивать функции Little Schemer и встроенные методы JavaScript. Я думал, что метод 'map' был только с underscore.js, но теперь некоторые из них являются частью ECMA. Благодарю. –