newLISP语法

来源:互联网 发布:js实现发表评论功能 编辑:程序博客网 时间:2024/05/21 17:17

newLISP的最大特点就是语法简单,估计一张纸能说明白最常用的。下面就说几个:

define 是用来定义函数的,比如下面定义并使用了一个my-add函数

> (define (my-add x) (+ 1 x))(lambda (x) (+ 1 x))> (my-add 4)5

(+ 1 x) 是函数体。

调用函数上面已经演示过,就是(函数名 参数1 参数2) 这样的形式,比如复制一个文件:

> (copy-file "/opt/git_backup.lsp" "/opt/git_backup.lsp2")true
返回true表示复制成功。


阻止表达式求值

前面加一个单引号就可以了。比如:

> '(+ 2 4)(+ 2 4)


条件语句

> (if (= 9 9) (println "ok"))ok"ok"
上面在条件判断成立的情况下,打印"ok"字符串。

看到两次是因为第一次是println打印,第二次是(println "ok") 的返回值显示在交互环境下。

来个实际应用到的,directory可以返回指定目录下的子文件(非递归)组成的list, 如果目录不存在,则返回nil, if判断会失败。

> (directory "/opt")("shareOn110" "gitolite.conf-compiled.pm" "repositories" "scrum.sql" ".." "git_backup.lsp2" ".#git_backup.lsp" "." "git_backup.lsp" "git_backup.lsp~" "#git_backup.lsp#" "gitolite.conf")> (directory "/opt/a")nil> (if (directory "/opt/a") (println "ok"))nil
因为/opt/a目录不存在,所以不会打印"ok"。

下面的if语句复杂点,有点像case语句的结构,如果条件之一满足,则分别执行对应的语句。如果所有条件都不满足,则执行最后的语句:

(if     (= ostype "Linux") (import "libz.so")    (= ostype "BSD") (import "libz.so")    (= ostype "OSX") (import "libz.dylib")    ...    (println "cannot import libz on this platform"))


遍历list

dolist就是干这事的。

> (dolist (file (directory "/opt")) (println "file: " file))file: shareOn110file: gitolite.conf-compiled.pmfile: repositoriesfile: scrum.sqlfile: ..file: git_backup.lsp2file: .#git_backup.lspfile: .file: git_backup.lspfile: git_backup.lsp~file: #git_backup.lsp#file: gitolite.conf"gitolite.conf"> 

上面的代码首先用directory找到/opt目录下的文件,放在一个list中返回,然后用(dolist (file ...) 来遍历。file里面就是每次遍历的list中的一个元素。

(println ...) 用来打印file.


exec执行系统命令:

比如备份文件:

> (exec "cp -r /home/git/repositories /opt/shareOn110/bk/")()> 




原创粉丝点击