配列の全要素の合計を求める関数を考える。
この場合の配列は、整数の配列であるとする。
elispだと、以下のようになる。
(defun sum (arr)
"Print sum of ARR(Array)."
(defun sum-in (arr n gokei)
(setq gokei (+ gokei (aref arr n)))
(if (equal (length arr) (+ n 1))
gokei
(sum-in arr (+ n 1) gokei)))
(sum-in arr 0 0))
(sum [1 2 3 4 5])
15
defun を関数内部で使っているので、ラムダ式に書き直す。
(defun sum2 (arr)
"Print sum of ARR(Array), use lambda expression."
(let ((f (lambda (arr n gokei)
(setq gokei (+ gokei (aref arr n)))
(if (equal (length arr) (+ n 1))
gokei
(funcall f arr (+ n 1) gokei)))))
(funcall f arr 0 0)))
(sum [1 2 3 4 5])
15
これを JavaScriptで書き直すと以下のようになる。
const sum2in = function(arr, n, gokei) {
gokei = gokei + arr[n];
console.log('n:' + n + ' gokei:' + gokei)
n++
if (n === arr.length) {
return gokei;
}
return sum2in(arr, n, gokei);
}
const sum2 = function(array) {
return sum2in(array, 0, 0);
}
console.log('sum2', sum2([1, 2, 3, 4, 5]))
n:0 gokei:1
n:1 gokei:3
n:2 gokei:6
n:3 gokei:10
n:4 gokei:15
15