2008/11/23

【scheme】【JavaScript】関数定義(可変長引数)(C#でいうparams)

schemeでも関数の定義。
可変長引数について。

C#のparamsキーワード付き引数的な、JavaScriptのargumentsプロパティ的な。

そうそう、コメントの仕方もわかった♪
「;」で始まる行はコメントになるっぽい。

参考はこちら
http://www.shido.info/lisp/scheme4.html
(define three-args+
  (lambda (a b c . d)
    (list a b c d)))

(three-args+ 1 2 3)
;; => (1 2 3 ())

(three-args+ 1 2 3 4 5 6 7 8 9 10)
;; => (1 2 3 (4 5 6 7 8 9 10))

(define params+
  (lambda (a . p)
    (list a p)))

(params+ 1 2 4 5)
;; => (1 (2 4 5))

でも、引数が0個もしくは1個もしくは複数個とかできんのかなぁー。
JavaScriptだとこんな感じか?

(function () { return function () { return arguments; }; })()(1,2,3,4,5,6,7)
それとも?
(function () { return function () { var ret = []; for (var i = 0; i < arguments.length; i++)ret.push(arguments[i]); return ret; }; })()(1,2,3,4,5,6,7)

The Little Schemer, 4th Edition

0 件のコメント:

コメントを投稿