Scheme 8-bfs方案实施

Scheme 8-bfs方案实施,scheme,breadth-first-search,Scheme,Breadth First Search,我正在考虑在scheme中实现bfs以解决8个难题,这是我到目前为止的代码(给出一些我无法调试的错误):: ;;定义结构的一些运算符 (定义blank“blank”) (定义深度0)(定义路径成本0) (定义nw 0) (定义n1) (定义ne 2) (定义W3) (定义C4) (定义e 5) (定义软件6) (第7条) (定义se 8) (定义“左”和“左”) (定义“权利”的权利) (向上定义“向上”) (定义down'down) ;;创建节点的函数 (定义make节点) (lambda(状

我正在考虑在scheme中实现bfs以解决8个难题,这是我到目前为止的代码(给出一些我无法调试的错误)::

;;定义结构的一些运算符 (定义blank“blank”) (定义深度0)(定义路径成本0) (定义nw 0) (定义n1) (定义ne 2) (定义W3) (定义C4) (定义e 5) (定义软件6) (第7条) (定义se 8) (定义“左”和“左”) (定义“权利”的权利) (向上定义“向上”) (定义down'down) ;;创建节点的函数 (定义make节点) (lambda(状态父操作符深度路径成本) (列表状态父运算符深度路径成本))) (定义扩展过程) (lambda(当前剩余) (追加剩余(当前的gen节点(有效移动(当前的汽车)())))) (定义发电机节点) (lambda(节点移动) (续) [(空?移动)'()] [其他 (letrec)(通用国家) (lambda(节点操作符移动) (如果(成对移动) (缺点 (make节点(操作符(car节点))(append(car节点)(car(cdr节点)))操作符(+1(car(cdr(cdr)节点(()())))1) (发电机状态节点(车辆移动)(cdr移动))) (make节点(操作符(car节点))(append(car节点)(car(cdr节点)))操作符(+1(car(cdr(cdr节点()(()))) (发电机状态节点(汽车移动)(cdr移动)))] (定义未访问的父级) (lambda(新列表) (如果(配对列表) (如果(eqv?新车(车辆列表)) #f (未访问(cdr列表)新) (如果(eqv?新列表) #f #t) )) (定义未访问其他 (lambda(新列表) (如果(配对列表) (如果(eqv?新(车辆(车辆列表))) #f (未访问(cdr列表)新) (如果(eqv?新车(车辆列表)) #f #t) )) (定义查找空白) (lambda(参考文献1) (续) [(等式参考9)空] [(等式?(列表参考ls参考)“空白”参考] [其他(查找空白ls(+ref 1))]) ;;运算符移动空白 (左定义) (lambda(州) (交换状态(查找空白状态0)((查找空白状态0)1))) (界定权利 (lambda(州) (交换状态(查找空白状态0)(+(查找空白状态0)1))) (向上定义 (lambda(州) (交换状态(查找空白状态0)((查找空白状态0)3))) (下定义 (lambda(州) (交换状态(查找空白状态0)(+(查找空白状态0)3))) ;将参考1设置为参考2的值 (定义集合参考! (λ(列表参考1值iter) (如果(方程式?iter 9) '() (如果(配对列表) (缺点 (如果(等式参考1 iter) 价值 (列表参考列表iter)) (设置参考!列出参考1值(+iter 1))) (如果(等式参考1 iter) 价值 (列表参考列表iter(()()))) (定义掉期) (lambda(州参考1参考2) (开始 (定义温度(列表参考状态参考1)) (设置!状态(设置参考!状态参考1(列表参考状态参考2)0)) (设置!状态(设置参考!状态参考2温度0)) (州) ;;返回给定状态的有效移动 (定义有效的移动 (lambda(州) (大小写(查找空白状态0) ([0](右下列表)) ([1](列表从左到右向下)) ([2](列表左下)) ([3](列表右上下)) ([4](列表左上右下)) ([5](列表左上下)) ([6](列表右上)) ([7](列表从左到右向上)) ([8](列表左上)) (else((())) ;;测试我们是否达到目标状态的过程 (b)定义试验程序 (lambda(州) (如果(情商)(汽车状态)目标) #t #f) )) ;;一般搜查程序 (定义一般搜索) (lambda(队列测试过程扩展过程限制num运行输出过程) (续) [(null?queue)#f];队列为空-未找到目标状态-非常不可能的情况-除非某个bozo超出状态空间 [(测试过程(车辆队列))(输出过程num runs(车辆队列))];达到目标状态?? [(零限制)“达到限制”];达到限制停止 [其他(一般查册) (展开程序(车辆队列)(cdr队列)) 测试程序扩展程序(-limit 1)(+num runs 1)输出程序)]) (定义输出过程) (lambda(num运行节点) (开始 (显示运行次数) (显示“\n”) (显示(列表参考(车辆节点)nw)) (显示(列表参考(车辆节点)n)) (显示(列表参考(车辆节点)ne)) (显示“\n”) (显示(列表参考(车辆节点)w)) (显示(列表参考(车辆节点)c)) (显示(列表参考(车辆节点)e)) (显示“\n”) (显示(列表参考(车辆节点)sw)) (显示(列表参考(车辆节点)) (显示(列表参考(车辆节点)se()()))) ;;测试功能 (定义初始状态) (兰博达(西北偏北-东北偏西-东南偏东) (列表西北偏北东北偏西东南偏东西南偏东南) (定义目标状态) (兰博达(西北偏北-东北偏西-东南偏东) (列表西北偏北东北偏西东南偏东西南偏东南) (定义测试未信息搜索) (λ(初始目标限制) (开始 (定义队列(列表(使节点初始化“()”()0 1))) (常规搜索队列测试过程展开过程限制0输出过程))) (定义init(使初始状态1 2 3 4 5 6 7为空8)) (定义目标(使目标状态1 2 3 4 5 6 7 8为空)) (测试未提供信息的搜索初始目标2000) 我要走了

module: duplicate definition for identifier in: left
作为一个错误,这意味着您不止一次地定义了left。(我在DrRacket中运行它,因此可能与您的不同。)


首先尝试修复该问题。

需要一些方法来检查当前状态是否已经是发现的节点的一部分:(
module: duplicate definition for identifier in: left