你可以通過兩種方式看到這一點。你的代碼是正確的,你只是把它稱爲錯誤的(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」現在可能更有意義?