免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3781 | 回复: 2
打印 上一主题 下一主题

代码不太理解, 望高手解释 breadth-first search in lisp [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-25 00:27 |只看该作者 |倒序浏览
急求哪位熟悉common lisp的朋友能把下面breadth-first search 代码解释下, 特别是有下划线的部分. nodes-not-visited 这段function没贴出来,可以忽略. 另外根据实际问题写了生成tree的代码, 但不知道下面的代码中哪里可以调用?

(defstruct bfs-node state parent)

(defun bfs-graph (start &optional verbose)         ;; ??
  (let ((node-list (list (make-bfs-node :state start :parent nil))))
     (do*((node (car node-list) (car node-list))
                  (closed nil)
                  (goal-found (if (goal-state? start) node nil)))       ;;"gola-state?"是用来比较的吗?在哪定义的?
            ((or (null node-list) goal-found)
               (if (null node-list)
               "No solution."
               (extract-bfs-path goal-found)))
      (when verbose (format t "Expanding node ~d~%" (bfs-node-state node)))
      (let* ((all-succs (mapcar #'(lambda (e) (make-bfs-node :state e :parent node))
                                           (expand (bfs-node-state node))))        ;; expand 是变量吗? 后面那部分是赋值吗?
                             (succs (nodes-not-visited all-succs node-list closed)))
               (setq goal-found (find-if #'(lambda (s) (goal-state? (bfs-node-state s))) succs))
               (setq node-list (append (cdr node-list) succs))
               (setq closed (cons node closed))))))

(defun extract-bfs-path (node)        ;; 生成tree的代码在哪里调用?
  (do ((path nil)
       (n node (bfs-node-parent n)))
      ((null n) path)
    (setq path (cons (bfs-node-state n) path))))

论坛徽章:
0
2 [报告]
发表于 2009-04-25 00:51 |只看该作者
1、&optional 说明后面的参数 verbose 是可选的

2、goal-start? 是函数,在某处定义

3、expand 是函数,后面不是赋值

4、作用在 tree 上的函数肯定于 tree 的结构有关。你说 tree 已经生成,但不知到怎么引用这棵 tree?

论坛徽章:
0
3 [报告]
发表于 2009-04-25 08:27 |只看该作者
谢谢版主解答!!

可能我没说清楚. 我在做一些关于AI的作业, 像是 water-jug, 8-queen problem. 现在已经根据规则把对初始变量(例如 (0 0))expand的代码写好了, 但是不知道在上面search代码中哪里进行调用.

另外代码中的node, closed, goal-found 应该是变量吧? "(or (null node-list) goal-found)" 这段代码有什么用?

[ 本帖最后由 homme1986 于 2009-4-25 09:23 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP