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

📄 sudoku.clp

📁 clips源代码
💻 CLP
字号:
;;; http://www.angusj.com/sudoku/hints;;; http://www.scanraid.com/BasicStrategies.htm;;; http://www.sudokuoftheday.com/pages/techniques-overview;;; http://www.sudokuonline.us/sudoku_solving_techniques;;; http://www.sadmansoftware.com/sudoku/techniques.htm;;; http://www.krazydad.com/blog/2005/09/29/an-index-of-sudoku-strategies/;;; #######################;;; DEFTEMPLATES & DEFFACTS;;; #######################(deftemplate possible   (slot row)   (slot column)   (slot value)   (slot group)   (slot id))   (deftemplate impossible   (slot id)   (slot value)   (slot priority)   (slot reason))   (deftemplate technique-employed   (slot reason)   (slot priority))(deftemplate technique   (slot name)   (slot priority))   (deffacts startup   (phase grid-values))(deftemplate size-value   (slot size)   (slot value))   (deffacts values   (size-value (size 1) (value 1))   (size-value (size 2) (value 2))   (size-value (size 2) (value 3))   (size-value (size 2) (value 4))   (size-value (size 3) (value 5))   (size-value (size 3) (value 6))   (size-value (size 3) (value 7))   (size-value (size 3) (value 8))   (size-value (size 3) (value 9))   (size-value (size 4) (value 10))   (size-value (size 4) (value 11))   (size-value (size 4) (value 12))   (size-value (size 4) (value 13))   (size-value (size 4) (value 14))   (size-value (size 4) (value 15))   (size-value (size 4) (value 16))   (size-value (size 5) (value 17))   (size-value (size 5) (value 18))   (size-value (size 5) (value 19))   (size-value (size 5) (value 20))   (size-value (size 5) (value 21))   (size-value (size 5) (value 22))   (size-value (size 5) (value 23))   (size-value (size 5) (value 24))   (size-value (size 5) (value 25)))   ;;; ###########;;; SETUP RULES;;; ###########;;; ***********;;; stress-test;;; ***********(defrule stress-test      (declare (salience 10))      (phase match)      (stress-test)      (priority ?last)      (not (priority ?p&:(> ?p ?last)))      (technique (priority ?next&:(> ?next ?last)))      (not (technique (priority ?p&:(> ?p ?last)&:(< ?p ?next))))      =>      (assert (priority ?next)))   ;;; *****************;;; enable-techniques;;; *****************(defrule enable-techniques   (declare (salience 10))      (phase match)      (size ?)      (not (possible (value any)))      =>      (assert (priority 1)));;; **********;;; expand-any;;; **********(defrule expand-any   (declare (salience 10))   (phase expand-any)      ?f <- (possible (row ?r) (column ?c) (value any) (group ?g) (id ?id))     (not (possible (value any) (id ?id2&:(< ?id2 ?id))))      (size ?s)      (size-value (size ?as&:(<= ?as ?s)) (value ?v))      (not (possible (row ?r) (column ?c) (value ?v)))     (not (and (size-value (value ?v2&:(< ?v2 ?v)))                            (not (possible (row ?r) (column ?c) (value ?v2)))))      =>      (assert (possible (row ?r) (column ?c) (value ?v) (group ?g) (id ?id))))   ;;; *****************;;; position-expanded;;; *****************(defrule position-expanded   (declare (salience 10))   (phase expand-any)      ?f <- (possible (row ?r) (column ?c) (value any) (group ?g) (id ?id))        (size ?s)      (not (and (size-value (size ?as&:(<= ?as ?s)) (value ?v))                (not (possible (row ?r) (column ?c) (value ?v)))))   =>      (retract ?f))   ;;; ###########;;; PHASE RULES;;; ###########;;; ***************;;; expand-any-done;;; ***************(defrule expand-any-done   (declare (salience 10))   ?f <- (phase expand-any)   (not (possible (value any)))      =>      (retract ?f)      (assert (phase initial-output))   (assert (print-position 1 1)))   ;;; ***********;;; begin-match;;; ***********(defrule begin-match   (declare (salience -20))      ?f <- (phase initial-output)         =>      (retract ?f)      (assert (phase match)));;; *****************;;; begin-elimination;;; *****************(defrule begin-elimination   (declare (salience -20))      ?f <- (phase match)      (not (not (impossible)))      =>      (retract ?f)      (assert (phase elimination)));;; *************;;; next-priority;;; *************(defrule next-priority   (declare (salience -20))      (phase match)      (not (impossible))      (priority ?last)      (not (priority ?p&:(> ?p ?last)))      (technique (priority ?next&:(> ?next ?last)))      (not (technique (priority ?p&:(> ?p ?last)&:(< ?p ?next))))      =>      (assert (priority ?next)));;; ************;;; begin-output;;; ************(defrule begin-output   (declare (salience -20))      ?f <- (phase match)      (not (impossible))      (priority ?last)      (not (priority ?p&:(> ?p ?last)))   (not (technique (priority ?next&:(> ?next ?last))))      =>      (retract ?f)      (assert (phase final-output))   (assert (print-position 1 1)))                                    

⌨️ 快捷键说明

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