为了方便的开发学习,还是回到了 Linux 平台下。毕竟这里安装些古董语言比较方便,怎么说也是类 Unix 系统上发展而来的嘛。第二天了,却仍在为 Lisp 语法奔波。手头上中文资料有限,又要考虑其他,这个进度还是忍受一下吧。好啦,不牢骚啦。下面是我的第一个 Lisp 程序:汉诺塔
(setq a "a")
(setq b "b")
(setq c "c")
(defun move (n x y z)
(if (> n 0)
((move (- n 1) x z y)
(princ "->")
(move (- n 1) y x z))))
(defun hanota (n)
(move n a b c))
可惜这段代码始终通不过编译,总得到如下提示:
*** - SYSTEM::%EXPAND-FORM: (MOVE (- N 1) X Z Y) should be a lambda expression
郁闷了一整天,找了许多的资料,最后得到这一句
COMMON LISP: A Gentle Introduction to Symbolic Computation 写道
IF is the simplest Lisp conditional. Conditionals are always macros or special functions,* so their arguments do not get evaluated automatically.
macros or special functions! 不明白为什么 if 后添加的必须是 macros or special functions(宏或特殊函数)。但这样就是说把 if 的候选区换成函数就能正常运行了。于是试用下面的代码:
(setq a "a")
(setq b "b")
(setq c "c")
(defun move (n x y z)
(if (> n 0)
(move-operation n x y z)
t
)
)
(defun move-operation (n x y z)
(move (- n 1) x z y)
(princ x)
(princ "->")
(princ z)
(princ " ")
(move (- n 1) y x z))
(defun hanota (n)
(move n a b c))
新建了一个 move-operation 函数,编译通过。OK, 测试:
> (hanota 3)
a->c a->b c->b a->c b->a b->c a->c
T
成功。
表面的问题是解决了,可这不是最终解决方案。marco or special functions 还不完全理解是什么。if 还有什么潜规则不清楚。princ 的回车换行也没找到。所以,这个初成品,只能是现在的一种简易替换方法吧。
分享到:
相关推荐
common-lisp-the-language-second-edition.PDF
本教程用于示范 AutoCAD® 的 AutoLISP® 编程环境的一些强大功能,并介绍 AutoLISP 语言的新功能。 本教程的目标是用自动绘图工具绘制花园小路。这些工具可以最大限度地节省绘图时间,显示出参数化编程的能力。 将...
AutoLisp源文件--标注高程.LSP
lisp解密程序-适用于早期的Lisp程序
lisp代码-write-line 输出语句
计算多个数字之和、计算多条线段长度之和、插入墙高标注、查询多段线顶点坐标并绘制、自动生成页码、绘制示坡线、插入排水箭头 https://blog.csdn.net/qq_24141055/article/details/121446354
Autocad的课件——AutoLISP-Visual-LISP教程.ppt
cad-lisp-3-表操作.LSP.lsp
lisp代码-format t 输出语句
自己收集的几个lisp语言相关的教程,具体如下: 1. Lisp之根源---对lisp的简要描述 2. 《Common Lisp》第二版 3. 《GNU_Emacs_Lisp_PROG》 4. LISP语言教程----一个其他童鞋整理的doc资料
lisp代码-write 输出语句
lisp 基础autolisp初步-学习 lisp不错的资料
Common Lisp Koans(lisp-koans)是一个语言学习练习程序,类似 ruby koans,python koans 等等。Common Lisp Koans 主要是帮助学习一些 lisp 规范特性和改进,可以学习到大量的 Common Lisp 语言特性。终端,在文件...
lisp-compiler-llvm:自托管LISP到LLVM-IR编译器
Common Lisp the Language, 2nd Edition经典,喜欢commonlisp的朋友们的少有资源
$ npm install --save lisp-array-to-js 或者,全局安装: $ npm install -g lisp-array-to-js 用法 io.js / node.js var lispArrayToJs = require ( "lisp-array-to-js" ) ; console . log ( lispArrayToJs ( ...
EXCEL 与 CAD 数据通讯插件 有源码及编译文件 推荐下载