2012-11-26 3 views
1

그래서 scheme/guile을 처음 사용하고 새로운 입력을 2 개의 입력으로 받아 들여야하는 할당이 필요합니다. 그런 다음 목록의 각 번호에 변수를 추가하고 인쇄합니다. 나는 그것이로드 가지고있다하지만이 입력 할 때 :구성표의 매개 변수 목록에 넣기

(add 1 (1 2 3)) 

을이 오류가 여기에

Backtrace: 
    39: 0* [add 1 ... 
    39: 1* [1 2 3] 

standard inout:39:8: In expression (1 2 3): 
standard input:39:8:wrong type to appy: 1 
ABORT: (misc-error) 

내가 현재 가지고있는 코드를 얻을.

(define a(list a)) 
(define (add y a) 
(define x 0) 
(while (< x (length a)) 
     (display (+ y (car a))) 
     (newline) 
     (set! a (cdr a)) 
     (set! x (+ x 1)) 
) 
) 

제 질문은 매개 변수에서 작동하도록 목록을 얻는 방법입니다. 나는 온라인으로 둘러 보았지만 havent는이 문제를 해결하기 위해 많이 찾았다. 나에게 줄 수있는 도움에 대해 미리 감사드립니다.

답변

2

(1 2 3)1 함수에 두 개의 인수 (23)를 호출하기 때문에 오류가 발생합니다. 1, 2 및 3이 포함 된 목록을 만들려면 (list 1 2 3)을 사용하십시오.

+0

와우 정말 간단했습니다. 고맙습니다. 나는 그것이 목록에 마지막 물건을 넣지 않을 것을 제외하고는 일하도록했다. 그러나 나는 그것을 쉽게 고칠 수 있어야한다. 다시 한번 감사드립니다. – bigfetz

0

정말 긴급한 절차로 절차를 작성 하시겠습니까? Scheme과 같은 것은 아닙니다. GNU Guile에서 프로 시저를 평가하면 언 바운드 변수 등에 대한 많은 오류 메시지가 나타납니다. set!은 Scheme의 초보자를위한 평가입니다. :) :) (SICP는 3 장에서 광범위하게 할당을 처리합니다). set!display의 부작용없이 기능적 스타일에서 훨씬 쉽게 할 수 있습니다. 재귀 절차 자신,

(define (add x) 
    (lambda (y) (+ x y))) 

(map (add 1) (list 1 2 3)) 
===> (2 3 4) 

그렇지 않으면 쓰기 :

위해
(define (add-to-list x list) 
    (if (null? list) 
     '() 
     (cons (+ x (car list)) 
      (add-to-list x (cdr list))))) 

(add-to-list 1 '(1 2 3)) 
===> (2 3 4) 

에를

당신은 당신이 이런 일을 할 수있는, 이미 매핑 및 상위 기능에 대한 인식이 있다면 재귀 적으로 사고를 배우고, SICP, HTDP 또는 "litte schemer"와 같은 책을 참고하십시오.

+0

나는지도를 사용하여 실제로 끝냈다. 프로그래밍에 대한 계획을 사용하여 말 그대로 내 첫 번째 시간이었습니다. 그래서 그것에 대해 전혀 몰랐습니다. 결국 훨씬 작고 단순 해졌습니다. – bigfetz

관련 문제