⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sudoku.l

📁 A very small LISP implementation with several packages and demo programs.
💻 L
字号:
# 21jan07abu# (c) Software Lab. Alexander Burger(load "lib/simul.l")### Fields/Board #### val lst(setq   *Board (grid 9 9)   *Fields (apply append *Board) )# Init values to zero (empty)(for L *Board   (for This L      (=: val 0) ) )# Build lookup lists(for (X . L) *Board   (for (Y . This) L      (=: lst         (make            (let A (* 3 (/ (dec X) 3))               (do 3                  (inc 'A)                  (let B (* 3 (/ (dec Y) 3))                     (do 3                        (inc 'B)                        (unless (and (= A X) (= B Y))                           (link                              (prop (get *Board A B) 'val) ) ) ) ) ) )            (for Dir '(`west `east `south `north)               (for (This (Dir This)  This  (Dir This))                  (unless (memq (:: val) (made))                     (link (:: val)) ) ) ) ) ) ) )# Cut connections (for display only)(for (X . L) *Board   (for (Y . This) L      (when (member X (3 6))         (con (car (val This))) )      (when (member Y (4 7))         (set (cdr (val This))) ) ) )# Display board(de display ()   (disp *Board 0      '((This)         (if (=0 (: val))            "   "            (pack " " (: val) " ") ) ) ) )# Initialize board(de main (Lst)   (for (Y . L) Lst      (for (X . N) L         (put *Board X (- 10 Y) 'val N) ) )   (display) )# Find solution(de go ()   (unless      (recur (*Fields)         (with (car *Fields)            (if (=0 (: val))               (loop                  (NIL                     (or                        (assoc (inc (:: val)) (: lst))                        (recurse (cdr *Fields)) ) )                  (T (= 9 (: val)) (=: val 0)) )               (recurse (cdr *Fields)) ) ) )      (display) ) )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -