newLISP语法
newLISP的最大特点就是语法简单,估计一张纸能说明白。下面就说几个:
define 是用来定义函数的,比如下面定义并使用了一个my-add函数
[plain]
> (define (my-add x) (+ 1 x))
(lambda (x) (+ 1 x))
> (my-add 4)
5
(+ 1 x) 是函数体。
调用函数上面已经演示过,就是(函数名 参数1 参数2) 这样的形式,比如复制一个文件:
[plain]
> (copy-file "/opt/git_backup.lsp" "/opt/git_backup.lsp2")
true
返回true表示复制成功。
阻止表达式求值
前面加一个单引号就可以了。比如:
[plain]
> '(+ 2 4)
(+ 2 4)
symbol
[plain]
> (set 'mysymbol "ebd")
"ebd"
> (upper-case mysymbol)
"EBD"
上面第一句设置了一个symbol, 值为字符串。
第二句使用该symbol。注意此时无需单引号。
条件语句
[plain]
> (if (= 9 9) (println "ok"))
ok
"ok"
上面在条件判断成立的情况下,打印"ok"字符串。
看到两次是因为第一次是println打印,第二次是(println "ok") 的返回值显示在交互环境下。
来个实际应用到的,directory可以返回指定目录下的子文件(非递归)组成的list, 如果目录不存在,则返回nil, if判断会失败。
[plain]
> (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"。
遍历list
dolist就是干这事的。
[plain]
> (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"
>
上面的代码首先用directory找到/opt目录下的文件,放在一个list中返回,然后用(dolist (file ...) 来遍历。file里面就是每次遍历的list中的一个元素。
(println ...) 用来打印file.
exec执行系统命令:
比如备份文件:
[plain]
> (exec "cp -r /home/git/repositories /opt/shareOn110/bk/")
()
>
补充:综合编程 , 其他综合 ,