newLISP的最大特点就是语法简单,估计一张纸能说明白最常用的。下面就说几个:
define 是用来定义函数的,比如下面定义并使用了一个my-add函数
> (define (my-add x) (+ 1 x)) (lambda (x) (+ 1 x)) > (my-add 4) 5
调用函数上面已经演示过,就是(函数名 参数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: shareOn110 file: gitolite.conf-compiled.pm file: repositories file: scrum.sql file: .. file: git_backup.lsp2 file: .#git_backup.lsp file: . file: git_backup.lsp file: git_backup.lsp~ file: #git_backup.lsp# file: gitolite.conf "gitolite.conf" >
(println ...) 用来打印file.
exec执行系统命令:
比如备份文件:
> (exec "cp -r /home/git/repositories /opt/shareOn110/bk/") () >