1

関数を受け取る関数(関数も要素をパラメーターとして受け取る)とリストをパラメーターとしてSchemeで宣言したい

しかし、コードの is 行でエラーが発生します (define (function funct(x),l)

4

2 に答える 2

1

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)

デモ

于 2012-09-30T00:04:24.510 に答える
0

スキームでは、関数定義でパラメータータイプを指定することはできません。あなたができる最善のことは

(define my-func(func . args)

これにより、 funcパラメーターの最初の引数と、 argsのリストの残りのすべての引数が得られます。次に、必要に応じて、引数に適用する前に**func**のタイプを確認できます。

(cond
  ((procedure? func) (func args))
  (else (report some kind of error however you want)))
于 2012-09-30T13:35:35.827 に答える