First attempt at tail recursion here

This commit is contained in:
2025-10-15 10:33:11 +02:00
parent 60fa13d0e2
commit d694adfb95

View File

@ -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 (cdr new) grids)))))
('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 '())))