내 1D 버전이 완성되었으므로 천천히 전장 2D 버전을 만들고 있습니다. 나는 보트의 길이, 보트의 위치 및 보트가 직면하고있는 방향을 고려해 보드에 보트를 배치하는 다음 함수를 작성했습니다. 그러나이 기능은 추악합니다. 아주 못생긴. 내 말은, 코드 중복에 많은 부분이 있음을 의미합니다. 어떤 사람이이 코드의 중복을 줄일 수있는 몇 가지 방법을 지적 할 수 있습니까?배를 전함에 배치하기 (코드 중복 제거)
(defun place-boat (len pos dir)
(let ((offset 0))
(dotimes (i len)
(if (= dir 0)
(if (< pos 50)
(setf (aref *ans-board*
(+ (/ pos 10) offset)
(mod pos 10))
'#)
(setf (aref *ans-board*
(- (/ pos 10) offset)
(mod pos 10))
'#))
(if (< pos 50)
(setf (aref *ans-board*
(/ pos 10)
(+ (mod pos 10) offset))
'#)
(setf (aref *ans-board*
(/ pos 10)
(- (mod pos 10) offset))
'#)))
(incf offset))))
EDIT는 : 설명을 위해, 10 × pos
는 2 차원 어레이의 셀을 의미하는 1과 100 사이의 값이다.
#lisp에있는 훌륭한 사람들의 도움을 받아 약간 솔루션을 수정하여 다음과 같이 끝 냈습니다. http : //paste.lisp .org/display/117875 # 3 감사합니다! – Andy
다행스럽게도 도움이 될 것입니다. – Wodin