2014-11-06 124 views
0

任何人都可以解釋爲什麼這不起作用嗎?我下面的文件,我不明白爲什麼我得到一個錯誤:Scheme - if語句的語法

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

我得到的錯誤:

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 

會發生什麼情況是您的程序正在調用提供的程序,並將程序用於比較<和參數。

意外綴

Algol語言程序員用於前綴fun(expr)和綴x cmp y而在LISP方言所有這些都有一個共同的形式,這是前綴的所有方式:(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

的功能應該是在if的第一件事情(方案使用前綴符號,不是中綴)。

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

然後

(functionName 2) 

輸出

1 
,當我在雞方案運行

1

試試這個:

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

記住:計劃使用前綴符號,這意味着所有運營商必須去操作數。換句話說,這是錯誤的:(n < 10),這是正確的:(< n 10)