2014-11-06 5 views
0

왜 이것이 작동하지 않는지 설명 할 수 있습니까? (이 기능은 if에서 제일 먼저해야스키마 - if 문을 사용하는 구문

application: not a procedure; 
    expected a procedure that can be applied to arguments 
    given: 5 
    arguments...: 
    #<procedure:<> 
    10 

답변

1

두 가지 방법으로 확인할 수 있습니다. 귀하의 코드가 정확하고 방금 그것을 잘못 (n에 대한 나쁜 유형)라고했거나 코드가 실수로 삽입 표기법으로 작성되었습니다. 나는 모두를 설명합니다 :

통과 잘못된 인수

n은 모든 데이터 유형이 될 수 있으며 심지어 절차가 될 수 있으며이 경우 코드 아무 문제가 없다 :

(define (compare-15 predicate-procedure argument) 
    (predicate-procedure 15 argument)) 

(define (compare-2 predicate-procedure argument) 
    (predicate-procedure 2 argument)) 

(functionName compare-15) ; ==> 3 
(functionName compare-2) ; ==> 1 

당신의 프로시 저는 <과 인수를 비교하는 프로 시저로 제공된 프로 시저를 호출하고 있습니다.

사고 중위 LISP 방언에있는 모든 사람들은 하나의 공통 양식을 가지고있는 동안

알골 프로그래머는 fun(expr) 및 중위 x cmp y을 접두사로 사용되며, 그 접두사 모든 방법 : (fun expr)(cmd x y).

(define (function-name n) 
    (if (< n 10)   ;; predicate expression 
     1     ;; consequent expression 
     3))    ;; alternative expression 

(function-name 15) ; ==> 3 
(function-name 2) ; ==> 1 

제도는 모든 인수를 의미 인수 등의 기능을 가질 수 있기 때문에

가 첫 번째 위치에 놓을 수있어, 당신이 원하고 절차로 호출 할 수있는 수를 때까지 계획이 모르는 정확히 수 있습니다 뭔가 잘못 됐어.

모든 프로 시저 호출이 응용 프로그램이라는 것을 알면 오류 메시지가 분명합니다. 프로 시저를 호출 할 예정이지만 변수 뒤에 n이있었습니다. "인수에 적용될 수있는 절차를 예상했다. 주어진 : 5"아마도 지금 더 의미가 있습니까?

0

체계는 접두사 표기법을 사용 : 나는 문서를 다음, 그리고 난 오류 얻을 이유를 이해할 수 없다 : 나는 오류가

(define (functionName n) 
    (if (n < 10) ;;if condition 
     1 ;; then condition 
     3)) ;; else condition 

을 중위가 아님).

1 

내가 닭 계획에서 실행 다음

(functionName 2) 

출력

(define (functionName n) 
    (if (< n 10) ;;if condition 
     1 ;; then condition 
     3)) ;; else condition 

.

1

이 시도 :

(define (functionName n) 
    (if (< n 10) 
     1 
     3)) 

는 기억 제도는 모든 사업자 전에 피연산자를 이동해야한다는 것을 의미 접두사 표기법을 사용합니다. 즉, 이것은 잘못된 것입니다 : (n < 10)이며 올바른 내용은 (< n 10)입니다.

관련 문제