커먼 리스프에서 가장 작은 수와 두 번째로 작은 수 사이의 범위를 나타내는 함수를 만들고 있습니다.Common Lisp에서 가장 작은 숫자와 두 번째 작은 숫자 사이의 범위는 어떻게 얻을 수 있습니까?
이 함수는 가장 작은 숫자와 가장 큰 숫자를 만들 수 있습니다. (나는 그것을 검사했다). 그러나이 기능은 목록에서 '두 번째로 작은 숫자'를 만들 수 없습니다 ...
이 문제를 해결하기 위해 고려해야 할 사항은 무엇입니까? 이 기능을 수행하는 데 필요한 충분한 조건을 충족 시켰다고 생각합니다.
큰 도움이 필요합니다. 이 결과는 다음과 같아야
는(내 범위는 '2 3 1 (0-7 10)) => (-1 10)
이 I 지은 내 코드 .
(defun my-range (list-of-numbers)
(let ((largest (first list-of-numbers))
(smallest (first list-of-numbers))
(secsmallest (first list-of-numbers)))
(dolist (element1 (rest list-of-numbers) largest)
(when (> element1 largest)
(setf largest element1)))
(dolist (element2 (rest list-of-numbers) smallest)
(when (< element2 smallest)
(setf smallest element2)))
(dolist (element3 (remove smallest list-of-numbers) secsmallest)
(when (< element3 secsmallest)
(setf secsmallest element3))
(return (list (- smallest secsmallest) largest)))))
대단히 감사합니다! – starrykss