Scheme-使用if语句的语法
有人能解释为什么这不起作用吗?我正在遵循文档,无法理解为什么会出现错误:Scheme-使用if语句的语法,scheme,racket,Scheme,Racket,有人能解释为什么这不起作用吗?我正在遵循文档,无法理解为什么会出现错误: (define (functionName n) (if (n < 10) ;;if condition 1 ;; then condition 3)) ;; else condition (定义(函数名n) 如果(n
(define (functionName n)
(if (n < 10) ;;if condition
1 ;; then condition
3)) ;; else condition
(定义(函数名n)
如果(n<10);;如果条件
1;;然后是条件
3)) ;; 其他条件
我得到一个错误:
application: not a procedure;
expected a procedure that can be applied to arguments
given: 5
arguments...:
#<procedure:<>
10
应用:不是程序;
应为可应用于参数的过程
给定值:5
论据。。。:
# 函数应该是if
中的第一件事(scheme使用前缀表示法,而不是中缀)
输出
1
当我在Chicken Scheme中运行它时。试试这个:
(define (functionName n)
(if (< n 10)
1
3))
(定义(函数名n)
(如果(
记住:Scheme使用前缀表示法,这意味着所有运算符必须在操作数之前。换句话说,这是错误的:(n<10)
,这是正确的:(
您可以从两个方面看到这一点。您的代码是正确的,您只是称它为错误的(对于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
发生的情况是,您的过程正在调用提供的过程,其中包含一个用于比较
3.
(函数名2);==>1.
由于Scheme可以将函数作为参数,这意味着每个参数都可以放在第一个位置,这可能正是您想要的,Scheme直到得到一个数字作为过程调用时才知道有问题
当您知道每个过程调用都被称为application时,错误消息非常清楚。它希望调用一个过程,但变量n
后面有一个数字。“需要一个可以应用于参数的过程。给定:5”现在可能更有意义了
(define (functionName n)
(if (< n 10)
1
3))
(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
(define (function-name n)
(if (< n 10) ;; predicate expression
1 ;; consequent expression
3)) ;; alternative expression
(function-name 15) ; ==> 3
(function-name 2) ; ==> 1