2012-03-16 11 views
2

スキーム関数に問題があります。オペレータをスキーム関数に渡すには

(define myfun(operator lis) 
    (if(null? lis) 
    '() 
    (cons(operator (car lis)(car lis))myfun(operator (cdr lis)) 
)))) 

機能は、たとえば(+'(1 2 3 4)) のためのパラメータと、リストとして演算子を取り、私は関数を呼び出すしようとすると、私が取得エラーです:番号を期待しますが、リストを受け取りました。だから私の質問は、どのように私は演算子とリストを使用して再帰的に関数を呼び出すのですか?

UPDATE:ちょうどオペレータ前'記号を必要としていました。

+0

スキームには、 "事業者" はありませんが実行されます。むしろ、名前がシンボルで構成されている関数がいくつかあります。彼らはただ、他の機能と同じように機能するので、あなたは、それらを呼び出すだけでは、他の機能は – newacct

答えて

4

ただの引用せずに、関数に+を渡します。 +は加算関数を示す。

(define (apply-op op x) 
    (op x x)) 

(apply-op + 2) ==> 4 
+0

が、それはあなたのコードを見てみると、カッコ私のためにそれを台無しに間違い... –

+2

た、ありがとう、私はすぐにすることを予測することができますようにそれらを渡すことができますあなたは括弧の問題を抱えている:具体的には、あなたは、右の識別子の後などに、括弧を残してきました「短所(演算子」。これは短所への呼び出しではなく、オペレータへの呼び出しの一部であるように、その左括弧を考えている巨大な警告サインです。あなたのコード内でこのパターンに目を光らせておいてください! –