如何将列表列表传入函数?

时间:2014-11-15 04:37:15

标签: lisp common-lisp

(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. 

1 个答案:

答案 0 :(得分:1)

请将代码剪切并粘贴到my previous answer中并逐字使用。在这里,您实际上已经对代码进行了一些更改,使其不正确:而不是原来的单臂if,您使情况变得更糟,零武装if

正确格式化的双臂if表达式如下所示(注意expr1expr2应该是齐平的(缩进到与...相同的级别){{1 }}):

test

这意味着如果(if test expr1 expr2) 评估为真值(test以外的任何值),则评估nil,其值为expr1的值表达;否则使用if。在我的代码段中,expr2test(null (first (rest list)))expr10expr2


直接使用我的代码片段的另一个好处是它已经为standard Lisp style正确格式化了,这使得其他Lisp程序员阅读起来更加愉快。