First attempt at tail recursion here
This commit is contained in:
@ -134,7 +134,7 @@
|
|||||||
(defun printSudoku (m) (loopforeach i m (print i)))
|
(defun printSudoku (m) (loopforeach i m (print i)))
|
||||||
|
|
||||||
(defun solve (grid)
|
(defun solve (grid)
|
||||||
(let ((empties (findEmpty grid))
|
(let ((solverHelper (lambda (grid grids) (let ((empties (findEmpty grid))
|
||||||
(size1 (foldr
|
(size1 (foldr
|
||||||
(lambda (x ys)
|
(lambda (x ys)
|
||||||
(let ((e (match x
|
(let ((e (match x
|
||||||
@ -154,17 +154,16 @@
|
|||||||
(if (eq empties nil)
|
(if (eq empties nil)
|
||||||
(if (valid grid)
|
(if (valid grid)
|
||||||
grid
|
grid
|
||||||
'not-valid)
|
(solverHelper (car grids) (cdr grids)))
|
||||||
(if (eq size1 nil)
|
(if (eq size1 nil)
|
||||||
(match (car others)
|
(match (car others)
|
||||||
(((? es) (?r) (?c))
|
(((? es) (?r) (?c))
|
||||||
(foldr
|
(let ((new (map (lambda (e) (place grid r c e)) es)))
|
||||||
(lambda (e ys) (match (solve (place grid r c e))
|
(solverHelper (car new) (append grids (new))))))
|
||||||
('not-valid ys)
|
(solverHelper
|
||||||
(xs xs)))
|
(foldr (lambda (x gs)
|
||||||
nil
|
|
||||||
es)))
|
|
||||||
(solve (foldr (lambda (x gs)
|
|
||||||
(match x
|
(match x
|
||||||
(((?e) (?r) (?c)) (place gs r c e))))
|
(((?e) (?r) (?c)) (place gs r c e))))
|
||||||
grid size1))))))
|
grid size1)
|
||||||
|
grids)))))))
|
||||||
|
(solverHelper grid '())))
|
||||||
|
|||||||
Reference in New Issue
Block a user