私の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は:明確にするために、pos
は、10×10の2Dアレイのセルを意味する、1と100の間の数です。
を、私はあなたのソリューションビットを微調整し、これで終わったします。http://paste.lisp .org/display/117875#3ありがとう! – Andy
私は助けてくれると嬉しいです – Wodin