2017-02-02 5 views
0

スキームでこれをどのように達成できますか? 例の入力は出力異なるサイズの引数のマップを使用するスキーム

'(2 4) 

(scalar-mult '(1 2) 2) 

になり、ここで私がこれまで試したものです:

(define (scalar-mult vec s) 
    (map (λ (vec s) (* s vec)) vec s)) 

私は別の同様のスレッドが連結をお勧めします見てきましたし、繰り返しますが、スキームでは機能しないようです。

答えて

0

がリストで、mの乗数で、eがリストの要素です。二つの引数を取るmap

(define scalar-mult 
    (lambda (l m) 
    (map (lambda (e) 
      (* e m)) 
     l))) 

機能:

はこれを試してみてください。まず、リストの各要素に適用され、次にリストになる関数。

0

あなたがしようとしているのは、2のリスト要素に対して繰り返しです。これはばかげています。 Schemeの標準で

mapが必要です。リストは異なるサイズのものであるとき、質問に答えるために

(define (scalar-mult vec s) 
    (map (λ (vec) (* s vec)) vec)) 

:あなたは2が変数として利用できるようにしたい場合は、単にそれを言及し、このようにそれを渡すことはありません。リストの引数はまったく同じサイズですが、リストのすべてが最短リストと同じ数の要素を持つかのように動作するSRFI-1があります。

#!r6rs 

(import (except (rnrs base) map for-each) 
     (srfi :1)) 

(map (lambda (n1 n2) (+ n1 n2)) 
    (circular-list 1 2) ; infinite list with 1, 2 repeating 
    '(2 3 4 5)) 
; ==> (3 5 5 7) 
関連する問題