2013-06-08 2 views
4

Scheme을 배우기 시작했으며 음, 최대 두 개의 매개 변수를 제공하는 자체 max 함수를 구현하려고합니다.Scheme 매개 변수 해당 없음

나는 다음과 같은 기능을 작성했습니다 :
The object 100 is not applicable.

는 GNU의 MIT의 문서를 검색 : (define (myMax x y) (cond ((> x y) (x)) ((< x y) (y))))

하지만 때마다 나는 말한다 오류가 그것을 (myMax 100 40) (예)를 호출 시도 그들은 다음과 같이 말합니다 : This type indicates an error in which a program attempted to apply an object that is not a procedure. The object being applied is saved in the datum field, and the arguments being passed to the object are saved as a list in the operands field.
하지만 그게 무슨 뜻입니까?

이상한 것은 두 개의 숫자를 더하는 아주 간단한 함수를 구현 한 것입니다.이 함수는 잘 작동하며 절대 값 함수도 잘 작동합니다. 조건부가 엉망이 될 수 있습니까?

감사 반응식 (function-name arguments)에서

+2

'x'가'y'와 같을 때 어떻게해야합니까? 어쩌면'if'가 더 적절할 수도 있습니다. – tom

+0

네 말이 맞아, 그걸 무시하려고 노력 했어. 하지만'if'가 더 적절한 이유는 무엇입니까? 다른 조건을 추가 할 수 있습니다. 그게 덜 적절한 이유가 있습니까? – Fingolfin

+2

'(if (> x y) x y)' – tom

답변

11

는 주어진 인수에 함수를 적용하기위한 구문이다. 따라서 (x)은 "함수에 x을 인자없이 적용"을 의미합니다. 그러나 x은 컴파일러가 "적용 가능하지 않다"고 말하면서 알려주려고하는 함수가 아닙니다.

x을 실제로 적용하고 싶지 않으므로 간단히 괄호를 제거하십시오. 그 외의 경우는 (y)과 같고, 다른 경우는 cond입니다.

+0

오오! 고마워요 :) – Fingolfin

+0

emmm 질문; (x) x로 추출하지 않습니까? 또는 여기에 데이터와 함수를 혼합하고 있습니까? – Fingolfin

+3

@AdelQodmani'(x)'는'x'가 함수이면 인자로'x'를 호출 한 결과로, 그렇지 않으면 에러로 평가합니다. – sepp2k

관련 문제