计算机代写 Lisp 实验作业(数独) 学号: 姓名:

Lisp 实验作业(数独) 学号: 姓名:
作业描述:请根据提示完成三个函数的设计和调试,使这三 个函数分别达到解开数独的一部分功能。
– 使用Clisp开发
– 数独将会在 9*9 的方格内完成

Copyright By PowCoder代写 加微信 powcoder

– 将以上 81 个格子分成 9 个 3*3 规格的格子 – 请满足以下条件并填充数字
 每个水平线和垂直线都有 1-9 这 9 个数字,并且不能出现重复
 3*3 规格的格子内都有 1-9 这 9 个数字,并且不能出现重复
 空的格子内将会暂时以 0 代替。
 调用解题函数(solveBoard‘((035… (7 8 2 …
 在空白中填充随机数字,并确保其正确无 重复。(checkBoard ‘((1 3 5 …
(7 8 2 …
 如果正确,则继续对数独板进行递归 (solveBoard ‘((1 3 5 …
(7 8 2 …
 完成全部遍历后输出结果值
(printBoard ‘((1 3 5 … (7 8 2 …

题目 1:printBoard 函数(5 分)
– 语法: (printBoard [sudokuBoard]) – 功能:输出给定的数独板
 输入:表示要输出的数独的列表 假设仅输入正确的数独盘
 输出:返回为数独板字符串,包含 9 个 3×3(请参阅示例格式)
 (printBoard‘((000000000)(000000000)(00000000
0) (0 0 0 0 0 0 0 0 0) (0 0 0 0 0 0 0 0 0) (0 0 0 0 0 0 0 0 0) (0 0 0 0
0 0 0 0 0) (0 0 0 0 0 0 0 0 0) (0 0 0 0 0 0 0 0 0)))
 Concatenate函数
 (concatenate (dataType) (data1) (data2))  功能:合并两个给定数据。用于合并字符串  例子:
 (concatenate ‘string “aa” “AA”)  “aaAA”  (concatenate ‘list ‘(1 2) ‘(3 4))  (1 2 3 4)
 format函数
 ~%: 换行符(类似于 C 语言中的\n):
 (format nil “aa~%aa”)
 ~a: 输出元素
 (format nil “~a” 1)  “1”
 (formatnil“~a”7) “7”
 (formatnil“~a”7) “7”
 (format nil “~a ~a” “Hello” “World”)  “Hello World”
请复制并使用┌, ─, ┬, ┐, │, ├, ┼, ┤,
└, ┴, ┘作为边框

题目 2: checkBoard 函数(5 分)
– 语法:(checkBoard [sudokuBoard] [xIndex] [yIndex])
– 功能:确保给定数独板的 (x, y) 数字正确 – I/O
 输入:表示数独的列表和要检查的数字的 x 坐标、y 坐标 假设仅输入正常数独
版,则 x 和 y 坐标的数字为 0(列表的开头)到 8(结束)
 输出:检查结果(左、右、上、下)(如果相同数字在上下左右9个空格内出
现,输出 NIL;没有出现,则输出 T)。
 创建包含要检查的数字的 x 轴、y 轴和 3×3 盘上的数字列表  递归确定列表中是否有要检查的数字和重复的数字
 (and (booleanValue) (booleanValue) …)
 功能:对于所有给定的 T/nil 值,全为 T 时返回 T,否则返回 NIL  例:
 (andT(eq11)(eq3(+12))) T  (and nil)  nil
 (floor (floatValue))

题目 3:solveBoard 函数(10 分)
– 语法:(solveBoard [sudokuBoard])
– 功能:输出给定数独板经完成后的版本。 – I/O
 输入:表示数独的列表 假定仅输入正常数独版本,空格标记为零
 输出:返回为数独板字符串,包含 9 个 3×3 输出到与题目 1 相同的窗体,每个
 (solveBoard‘((035469278)(782105609)(06027813
5) (3 2 1 0 4 6 8 9 7) (8 0 4 9 1 3 5 0 6) (5 9 6 8 2 0 4 1 3) (9 1 7 6
5 2 0 8 0) (6 0 3 7 0 1 9 5 2) (2 5 8 3 9 4 7 6 0)))
 正确答案计算算法请参见作业描述中的图片程序流。
 递归填充给定板的格
 选择空域 (0) 后,填充 1 到 9 的数字,并在该板上调用 checkBoard 函数  递归剩余导航进度(如果已填充)
 通过printBoard为成品进行输出
 你也可以使用其他算法和函数来构建本作作业
 评分不包括时间复杂度、内存等,将仅在无法操作或未找到适当答案时进行减分  不评估正确答案过多的示例(例如,如果所有空格都为空)

– 使用循环语句,所有函数都以递归方式调用 (loop, while, do, dotimes,
– 禁用除函数参数以外的变量 (defparameter、defvar、let 等)
– 所有输出值都是函数的返回值

程序代写 CS代考 加微信: powcoder QQ: 1823890830 Email: powcoder@163.com