2016-04-10 18 views
0

この単純なScheme関数を、リスト内の別の関数を返す関数に変換し、その関数をそのリストのすべての要素に適用するのは苦労しています。 。3つのパラメータのScheme関数を3つ返す関数

この機能

(define (operList op i lis) 

    (if (= 0 (length lis)) '() 

    (cons (op i (car lis)) (operList op i (cdr lis)))) 

) 

は、私が呼び出すことができるように、しかし、どのように私はこの機能を編集することができます

(3 3 3)」この

(operList + 2 '(1 1 1)) 

とリターンのように呼び出すことができます次のようにしてください。

((operList + 2) '(1 1 1)) 
同じ結果の0

+0

取るために人々に感謝して何が悪いです私の質問を読む時間? o.O – abv88

答えて

1

リストを受け取る新しい関数を返す必要があります。私は、インデントとベースケースを修正する自由を取った(それが空リストの場合はどうやって尋ねるべきかは分かりません)。再帰が今と呼ばれる方法に特別な注意を払う:

(define (operList op i) 
    (lambda (lis) 
    (if (null? lis) 
     '() 
     (cons (op i (car lis)) 
       ((operList op i) (cdr lis)))))) 

期待どおりに動作します:

((operList + 2) '(1 1 1)) 
=> '(3 3 3) 
+0

ありがとう!私はちょうど私のコードが愚かなエラーを持つ可能性があり、あなたのコメントを感謝するように、Schemeを学び始めた:) – abv88

0

またmapを使用することができます。

(define operList 
    (lambda (op i) 
    (lambda (lst) 
     (map 
     (lambda (x) (op i x)) 
     lst)))) 
関連する問題