只是一个新定义的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...: [none]
for (arccos 1)
答案 0 :(得分:2)
错误类型是常见的 - 所以这里是如何快速找出错误在程序中的位置。
在DrRacket中运行它。请注意,此表达式为红色:
(
(/
(sqrt (-
1 (expt (cos z) 2)))
(cos z)))
错误消息说:“预期可以应用于给定参数的过程”。最后一部分暗示Racket期望( ... )
是一个过程(函数)的应用程序。但是第一个参数是:(/ ...)
,除法的结果是数字。
即:当您收到此错误时,请始终查看第一个表达式。
这里的问题是额外的一层括号( (/ ...) )
应该是(/ ...)
。在其他情况下,使用display打印出第一个表达式的结果,以便查看出现了什么问题。
注意:在处理算术运算时,使用以下缩进约定会很有帮助:
(operation argument1
argument2
...)
在这个例子中:
(atan (/ (sqrt (- 1
(expt (cos z) 2)))
(cos z))))
答案 1 :(得分:1)
试试这个:
(define (arccos z)
(atan (/ (sqrt (- 1 (expt (cos z) 2)))
(cos z))))
在atan
之后有一对不必要的括号,同时注意正确缩进会使这种类型的错误更容易被发现。