2013-09-22 1 views
-2

다음 코드가 주어지면 함수를 호출하는 구문은 무엇입니까 dist?인수가 구조 인스턴스 여야하는 함수 호출

(defstruct coord 
    x 
    y) 

(defstruct line 
    (point1 :type coord) 
    (point2 :type coord)) 


(defun dist (point1 point2) 
    (sqrt (+ (square (- (coord-x point1) (coord-x point2))) 
      (square (- (coord-y point1) (coord-y point2)))))) 

(defun square (x) (* x x)) 
+0

표시된 코드에서 이미'sqrt','+','square','-','coord-x' ,'coord-y','*'등이있다. 'dist '를 같은 방식으로 호출하는 데 문제가 있습니까? 이미이 코드의 나머지 부분을 얻었 으면 무엇을 요구하는지 명확하지 않습니다. –

답변

0

Lisp 제품군의 언어에 대한 아름다운 점은 (상대적으로) 일관된 구문입니다. (square n) 또는 *(* n1 n2 ...)으로 작성하여 square 함수를 호출하는 것처럼 이라는 두 개의 인수를 취하는 dist을 호출합니다. 문맥 상 이것은 다음과 같은 형태 일 수 있습니다 :

(let ((point1 (make-coord …)) 
     (point2 …)) 
    (dist point1 point2)) 
+0

고맙습니다. 어떤 이유로 든이 코드는 실행했을 때 타입 에러를 던질 것이지만, setf 메소드를 사용하여 변수를 글로벌화하고 설명대로 호출하면 매력처럼 작동합니다. – JaminB