2017-12-24 17 views

답변

0

귀하의 질문에 쉬운 대답이 하나도 없습니다. 일련의 가중치를 허용하는 함수를 작성하고 일련의 가중치를 허용하는 함수를 작성하고 가중치와 합계의 곱을 요약하는 것처럼 들린다 (단, 자신이 정말 도움이 ...).

1) 디자인입니까, 아니면 다른 사람입니까? 나는이 방법으로 이런 식으로 디자인하지 않을 것이다.

2) 함수를 여러 가지 방식으로 반환하는 함수를 작성할 수 있습니다. 예 : 그래서 weighted-sum 매개 변수 (의는 ws 그들을 부르 자)와 같은 값의 변수 수를 소요하고, 나아가서, 매개 변수 (vs을)의 변수 번호를 취하는 새로운 절차를 반환하고 계산을 수행

;; these all do the same thing. 
;; they all have the type (number -> (number -> number)) 

(define a (lambda (x) (lambda (y) (+ x y)))) 

(define ((a x) y) (+ x y)) 

(define (a x) 
    (define (b y) (+ x y)) 
    b) 
0

. 라켓에 는 for/fold 구조는 편리 :

(define (weighted-sum . ws) 
    (lambda vs 
    (for/fold ((res 0)) ((i (in-list ws)) 
         (j (in-list vs))) 
     (+ res (* i j))))) 

또는

(define ((weighted-sum . ws) . vs) 
    (for/fold ((res 0)) ((i (in-list ws)) 
         (j (in-list vs))) 
    (+ res (* i j)))) 

또는 명명 된 내부 절차 돌아 foldl 더 고전을 사용 :

(define (weighted-sum . ws) 
    (define (sub . vs) 
    (foldl 
    (lambda (i j res) (+ res (* i j))) 
    0 
    ws 
    vs)) 
    sub) 

을의 경우 그 :

> ((weighted-sum 1) 5) 
5 
> ((weighted-sum 1/2 1/2) 3 1) 
2 
+0

대단히 감사합니다! 마지막으로 인 -리스트의 길이를 얻는 방법에 대한 질문? –

+0

'(length ws)'와'(length vs)'를 사용할 수는 있지만 왜 필요합니까? – uselpa

+0

나는 길이가 비교를 위해서만 필요하다. 결과에 차이가 없다는 것을 안다. –