2014-11-15 5 views
-1
(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)) 
    ) 

이 코드를 작성했습니다. 제 질문은 어떻게 도우미 -2 방법을 사용합니까? 시도했습니다.목록에있는 목록을 함수로 전달하는 방법은 무엇입니까?

(helper-2 '((2 0) (4 0))) 
(helper-2 '(2 0) '(4 0)) neither works. Could anyone help? Thanks. 

답변

1

코드를 잘라내어 my previous answer에 붙여 넣고 그대로 사용하십시오. 여기서는 코드를 잘못 수정하기 위해 실제로 코드를 변경했습니다. 원래 하나의 무장 한 if 대신에 더 무겁게 만든 코드는 if입니다. 이 경우 있음을 의미

(if test 
    expr1 
    expr2) 

:

된 올바른 형식의 두 무장 if 표현 (expr1expr2는()와 같은 수준에 test을 들여과 같은 높이 있어야하는 것을주의) 다음과 같습니다 test은 truthy 값 (nil 이외의 값)으로 평가 된 다음 expr1이 계산되고 그 값은 if 표현식의 값입니다. 그렇지 않으면 expr2이 대신 사용됩니다. 내가 가진 코드에서 test(null (first (rest list)))이고 expr10이고 expr2(+ (distance (car list) (first (rest list))) (helper-2 (rest list)))입니다.


직접 내 코드를 사용하는 방법에 대한 다른 좋은 점은 이미 훨씬 더 적절한 다른 리스프 프로그래머를위한 읽을 수있는 standard Lisp style 올바르게 포맷 점이다.

+0

어쨌든 잘못된 장소에 잘못된 괄호를 배치하는 문제입니다. 저는 CL 초보자이지만 프로그래밍 할 때 새로운 것은 아닙니다. 나에게, 편집장은 올바른 장소에 배치하는 데 도움이되는 것으로 나타났습니다. –

관련 문제