2015-01-11 5 views
1

커먼 리스프의 맵 함수를 사용하여 비선형리스트의 GCD를 얻으려면 어떻게해야합니까?비선형리스트의 GCD

defun gcd (a b) 
    (cond 
     ((eq b 0) a) 
     (t (gcd b (mod a b))))) 

(defun gcdall (l) 
    (cond 
     ((null l) nil) 
     (t (...)) 
) 
) 

지도 기능을 사용하는 방법을 잘 모르기 때문에 도움이나 도움이 될 것입니다. 감사!

+0

당신이지도를 사용해야합니까? 그렇지 않다면 당신은 단지 차의 gcd, cdr의 gcd를 발견 할 수 있었고, 그것들의 gcd를 가져갈 수 있었다. – malisper

답변

1

나는 그것으로 충분 쉽게, 정확하게 원하는 것을 이해한다면 :

(defun nested-gcd (list) 
    (reduce #'gcd list :key (lambda (elt) 
          (if (consp elt) 
           (nested-gcd elt) 
           elt)))) 
0

비선형 목록은 무엇인지 모르지만 표준의 일부인 gcd을 사용하면 가장 큰 공약수를 얻을 수 있습니다. 어떤 종류의 나무를 의미한다면, 먼저 나무를 평평하게해야 할 것입니다.

+1

비선형 목록은 양식 목록 (2 (12 10) 18 (3))을 의미합니다. 나는 그것을 평평하게하지 않고 직접적인 방법이 있어야한다고 생각했다. – user1012732

+0

Gcd는 연관성이 있으므로 트리 탐색 (gsg에서 보여준 것)을 사용하여 인라인으로 단계별로 수행 할 수 있습니다. – Svante