编程点距离公式时出现方案错误 - 尝试应用非过程
Scheme error when programming point-distance formula - attempt to apply non-procedure
我正在尝试使用 Scheme 编写点距公式。我快要搞定了,只是出现错误。
准确的错误是:
Traceback (most recent call last):
File "In [54]", line 5, col 11, in 'application'
File "In [54]", line 5, col 11
RunTimeError: attempt to apply non-procedure '4'
这是我的代码:
; code for the distance procedure
(define (distance p1 p2) (sqrt (+ (* (- (car(p2)) (car(p1))) (- (car(p2)) (car(p1)))) (* (- (car(cdr(p2))) (car(cdr(p1)))) (- (car(cdr(p2))) (car(cdr(p1))))))))
(distance (4 5) (3 2))
供参考,点距公式为:
√((x2 - x1)^2 + (y2 - y1)^2)
通常最好正确格式化 Scheme 代码,而不是将所有内容都放在一行中。
并且命名中间值很有用。如果您的公式包含 x1
、x2
、y1
和 y2
,请使用这些名称创建 Scheme 变量。这样更容易理解解决方案。
Scheme 有几个嵌套 car
和 cdr
函数的缩写。如果你需要一个cdr
的car
,你可以使用cadr
.
Scheme 允许您在变量名中使用数学符号。如果变量包含 x2
和 x1
的差异,则可以将其命名为 x2-x1
。这增强了 Scheme 的波兰表示法的可读性。
(define (distance p1 p2)
(let ((x1 (car p1))
(y1 (cadr p1))
(x2 (car p2))
(y2 (cadr p2)))
(let ((x2-x1 (- x2 x1))
(y2-y1 (- y2 y1)))
(sqrt (+ (* x2-x1 x2-x1)
(* y2-y1 y2-y1))))))
如果你想将列表文字传递给函数,你必须引用它们以防止计算。
(distance '(4 5) '(3 2))
或正确使用评价:
(distance (list 4 5) (list 3 2))
我正在尝试使用 Scheme 编写点距公式。我快要搞定了,只是出现错误。
准确的错误是:
Traceback (most recent call last):
File "In [54]", line 5, col 11, in 'application'
File "In [54]", line 5, col 11
RunTimeError: attempt to apply non-procedure '4'
这是我的代码:
; code for the distance procedure
(define (distance p1 p2) (sqrt (+ (* (- (car(p2)) (car(p1))) (- (car(p2)) (car(p1)))) (* (- (car(cdr(p2))) (car(cdr(p1)))) (- (car(cdr(p2))) (car(cdr(p1))))))))
(distance (4 5) (3 2))
供参考,点距公式为:
√((x2 - x1)^2 + (y2 - y1)^2)
通常最好正确格式化 Scheme 代码,而不是将所有内容都放在一行中。
并且命名中间值很有用。如果您的公式包含 x1
、x2
、y1
和 y2
,请使用这些名称创建 Scheme 变量。这样更容易理解解决方案。
Scheme 有几个嵌套 car
和 cdr
函数的缩写。如果你需要一个cdr
的car
,你可以使用cadr
.
Scheme 允许您在变量名中使用数学符号。如果变量包含 x2
和 x1
的差异,则可以将其命名为 x2-x1
。这增强了 Scheme 的波兰表示法的可读性。
(define (distance p1 p2)
(let ((x1 (car p1))
(y1 (cadr p1))
(x2 (car p2))
(y2 (cadr p2)))
(let ((x2-x1 (- x2 x1))
(y2-y1 (- y2 y1)))
(sqrt (+ (* x2-x1 x2-x1)
(* y2-y1 y2-y1))))))
如果你想将列表文字传递给函数,你必须引用它们以防止计算。
(distance '(4 5) '(3 2))
或正确使用评价:
(distance (list 4 5) (list 3 2))