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