First attempt at tail recursion here

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

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 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 '())))