注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Chun Tian (binghe)

超越自我,洞察宇宙

 
 
 

日志

 
 

KnowledgeWorks: Hanoi Problem  

2007-05-31 08:48:08|  分类: Lisp |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
用 KnowledgeWorks 求解 Hanoi 问题,典型的只使用反向链的问题,以下是 LispWorks 提供的示例代码和具体运行过程:

;; -*- Mode: Lisp; rcs-header: "$Header: /hope/lwhope1-cam/hope.0/compound/58/KWdemos/RCS/hanoi:hanoi-rules.lisp,v 1.1.5.1 2006/03/24 14:43:15 davef Exp $" -*-
;; Copyright (c) 1987--2006 LispWorks Ltd. All rights reserved.
;;; use: type e.g. (move-tower 3 1 2) into the KnowledgeWorks listener

(in-package kw-user)

(defrule move-tower :backward
  ((move-tower ?height ?from-peg ?to-peg)
   <--
   ((- 6 (+ ?from-peg ?to-peg)) ?spare-peg)
   (move-tower-internal ?height ?from-peg ?to-peg ?spare-peg)))

(defrule move-disc :backward
  ((move-disc ?size ?from-peg ?to-peg)
   <--
   ((format t "~%Move disc ~s from peg ~s to peg ~s"
            ?size ?from-peg ?to-peg))))

(defrule move-tower-internal :backward
  ((move-tower-internal 1 ?from-peg ?to-peg ?spare-peg)
   <--
   (move-disc 1 ?from-peg ?to-peg)
   (cut))
  ((move-tower-internal ?height ?from-peg ?to-peg ?spare-peg)
   <--
   ((1- ?height) ?height-1)
   (move-tower-internal ?height-1 ?from-peg ?spare-peg ?to-peg)
   (move-disc ?height ?from-peg ?to-peg)
   (move-tower-internal ?height-1 ?spare-peg ?to-peg ?from-peg)))


运行过程如下:

==> (move-tower 3 1 3)

Move disc 1 from peg 1 to peg 3
Move disc 2 from peg 1 to peg 2
Move disc 1 from peg 3 to peg 2
Move disc 3 from peg 1 to peg 3
Move disc 1 from peg 2 to peg 1
Move disc 2 from peg 2 to peg 3
Move disc 1 from peg 1 to peg 3YES.
OK.

  评论这张
 
阅读(1130)| 评论(4)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017