(defun square (n) (* n n))
(defun distance (a b)
(let (
(h (- (second b) (second a)))
(w (- (first b) (first a))))
(sqrt (+ (square h) (square w)))
)
)
(defun helper-2 (head)
(if (null (first (rest head))))
0
(+
(distance (car head) (first (rest head)))
(helper-2 (rest head))
)
我已编写此代码。我的问题是如何使用helper-2方法?我试过了
(helper-2 '((2 0) (4 0)))
(helper-2 '(2 0) '(4 0)) neither works. Could anyone help? Thanks.
答案 0 :(得分:1)
请将代码剪切并粘贴到my previous answer中并逐字使用。在这里,您实际上已经对代码进行了一些更改,使其不正确:而不是原来的单臂if
,您使情况变得更糟,零武装if
。
正确格式化的双臂if
表达式如下所示(注意expr1
和expr2
应该是齐平的(缩进到与...相同的级别){{1 }}):
test
这意味着如果(if test
expr1
expr2)
评估为真值(test
以外的任何值),则评估nil
,其值为expr1
的值表达;否则使用if
。在我的代码段中,expr2
为test
,(null (first (rest list)))
为expr1
,0
为expr2
。
直接使用我的代码片段的另一个好处是它已经为standard Lisp style正确格式化了,这使得其他Lisp程序员阅读起来更加愉快。