Scheme Racket/Lisp中出错:应为可应用于参数的过程
只是一个新定义的arccos函数,但我没有发现错误:Scheme Racket/Lisp中出错:应为可应用于参数的过程,scheme,lisp,racket,Scheme,Lisp,Racket,只是一个新定义的arccos函数,但我没有发现错误: (define (arccos z) (atan ( (/ (sqrt (- 1 (expt (cos z) 2))) (cos z))))) 你能帮我吗? 错误消息: expected a procedure that can be applied to arguments given: 1.1447765772467506 arguments
(define (arccos z)
(atan (
(/
(sqrt (-
1 (expt (cos z) 2)))
(cos z)))))
你能帮我吗?
错误消息:
expected a procedure that can be applied to arguments
given: 1.1447765772467506
arguments...: [none]
for (arccos 1)
试试这个:
(define (arccos z)
(atan (/ (sqrt (- 1 (expt (cos z) 2)))
(cos z))))
atan后有一对不必要的括号,请注意,正确缩进将使这类错误更容易发现。错误类型是一种常见的错误类型-下面介绍如何快速发现程序中的错误 用球拍拍拍。请注意,此表达式的颜色为红色:
(
(/
(sqrt (-
1 (expt (cos z) 2)))
(cos z)))
错误消息说:“需要一个可应用于给定参数的过程”。最后一部分暗示Racket期望(…)
是一个过程(函数)的应用程序。但是,第一个参数是:(/…)
,除法的结果是一个数字
也就是说:当您遇到这个错误时,请始终查看第一个表达式
这里的问题是额外的一层括号(/…)
应该是(/…)
。在其他情况下,使用display打印第一个表达式的结果,以查看出现了什么问题
注意:在处理算术运算时,使用以下缩进约定可能会有所帮助:
(operation argument1
argument2
...)
在本例中:
(atan (/ (sqrt (- 1
(expt (cos z) 2)))
(cos z))))
解决了一个问题(这里有正确的代码:(define(arccos z)(atan(/(sqrt(-1(expt(cos z)2)))(cos z)))我建议正确缩进代码,然后检查语法正确性。当开始使用lisp时,此错误消息的实际意义几乎总是:“您有太多的参数。请记住,
(
与{
不同。如果在之后没有函数名(
),您可能不需要的():