関数を受け取る関数(関数も要素をパラメーターとして受け取る)とリストをパラメーターとしてSchemeで宣言したい
しかし、コードの is 行でエラーが発生します (define (function funct(x),l)
関数を受け取る関数(関数も要素をパラメーターとして受け取る)とリストをパラメーターとしてSchemeで宣言したい
しかし、コードの is 行でエラーが発生します (define (function funct(x),l)
Scheme では、関数は第一級の市民です。したがって、他のシンボルと同じように、関数をパラメーターとして別の関数に渡すことができます。function
キーワードのようなものはありません。
たとえば、map
関数を引数として取り、それをリストのすべてのメンバーに適用するという関数を定義するには、次のように使用できます。
(define (map f l)
(if (null? l)
l
(cons (f (car l)) (map f (cdr l)))))
add1
次に、渡したい関数が呼び出された場合map
:
(define (add1 x)
(+ x 1))
(map add1 '(1 2 3))
結果は になります(2 3 4)
。
デモ。
スキームでは、関数定義でパラメータータイプを指定することはできません。あなたができる最善のことは
(define my-func(func . args)
これにより、 funcパラメーターの最初の引数と、 argsのリストの残りのすべての引数が得られます。次に、必要に応じて、引数に適用する前に**func**のタイプを確認できます。
(cond
((procedure? func) (func args))
(else (report some kind of error however you want)))