2017-02-16 8 views
2

C 코드를 학습했다. Scheme을 사용하여 새로운 것을 시도하고 싶었습니다. 두 개의 인수를 받아들이고 둘 중 더 큰 것을 반환하는 프로 시저를 만들려고합니다.2 개의 인수를 가진 스킴 프로 시저

(define (larger x y) 
    (if (> x y) 
    x 
    (y))) 

(larger 1 2) 

또는

(define larger 
    (lambda (x y) 
    (if (> x y) 
     x (y)))) 

(larger 1 2) 

I는 이들 모두 즉 경우 x> y를 리턴 X 동일 믿는다 그렇지 않으면을 반환하십시오.

이 중 하나를 시도하면 오류가 발생합니다. 예 : 2 함수 또는 오류가 아닙니다 : 호출 할 수 없습니다 : 내가 SICP와 TSPL 위에 읽는 몇 시간을 보냈어요 2

,하지만 아무것도 밖으로 점프하지 않습니다 (아마 나는 "목록"을 참조를 사용할 필요가 자동차 지휘관 및 ?)

어떤 도움을 통해 두 가지 요소에 감사드립니다. 내가 잘못 게시하는 경우, 동일한 질문에 대한 이전 답변을 놓친 경우 또는 부적절한 경우 사과드립니다.

답변

1

그 이유는 Scheme과 모든 Lisp 언어에서 C 및 다른 많은 언어와 달리 괄호가 구문의 중요한 부분이기 때문입니다.

는 예를 들어 이들은 함수 호출을 위해 사용된다 (f a b c) 수단은 인수 a, bc로 (통화) 기능 f 적용 (f) 수단 (통화) (인자없이) 기능 f 적용있다.

따라서 코드 (y)은 숫자 2 (현재 값은 y)을 적용하지만 2는 기능이 아니라 숫자 (오류 메시지와 동일)를 적용합니다.

(define (larger x y) 
    (if (> x y) 
     x 
     y)) 

(larger 1 2) 
+0

브릴리언트 :

는 단순히 코드를 변경! 고맙습니다! 나는 이것이 효과가 있음을 확인했다. 나는 2가 함수처럼 다루어지고있는 것을 볼 수 있었지만, 왜/어떻게 이해할 수는 없었다. C.에서 오는 명확한 바이어스. 고마워, 또. :-) – h34thf