0
在學習了大部分The Little Schemer之後,我一直在努力研究Coderbyte挑戰的一些遞歸解決方案。「映射」Little Schemer到coderbyte挑戰:資本化
經過一番搗鼓之後,我投入了一番思緒,並認爲我的upperConsIt會查看數組,查找某個特定字母的所有實例,並將每個字母大寫。最終,我將有一個數組,我可以將其轉換爲一個字母,並且該字母現在大寫。
當我嘗試使用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()')
我只是不明白這是怎麼一個類型的錯誤。數組應該是一個數組,對嗎?
我明白了。因此,在剛剛構建的JavaScript中確實沒有與cdr等效的內容。 –
@GabrielKunkel您的意思是內置的cdr'恰好匹配您選擇的'cons'實現?你可以很容易地將對象與'car','cdr'實現爲方法。 (我會更喜歡)順便說一句。 JavaScript有'map'作爲數組的方法,但它不使用pair。 – Sylwester
我明白了。 Little Schemer確實幫助我完全理解遞歸,但是如果不先構建等價類庫,它不會轉化爲JavaScript。基本上,你不能真正混合Little Schemer函數和JavaScript內置方法。我以爲'map'方法只是使用underscore.js,但現在其中一些是ECMA的一部分。謝謝。 –