语法
文章平均质量分 59
炼气散人
等儿子高考后,或许会回来
展开
-
newlisp 启动参数
写一个newlisp脚本,执行时有时需要传递参数,比如一个连接tcp server的测试程序,执行时需要指定服务器IP地址和端口号。newlisp try.lsp localhost 9999newlisp中的mai-args代表了所有的传递参数,包括命令本身,因此:(println main-args)显示结果如下:("newlisp" "try.lsp" "localhost" "9999")原创 2013-01-29 15:23:45 · 2623 阅读 · 0 评论 -
newlisp 抓取网页
用newlisp抓取网页的几个方法原创 2013-12-28 18:54:25 · 3711 阅读 · 2 评论 -
为Emacs 24.3配置newLISP开发环境
首先获取newlisp-mode项目:~/work$ git clone https://github.com/may/newlisp-mode.git然后在~/.emacs文件中添加配置:;; newLISP mode(add-to-list 'load-path (expand-file-name "/opt/emacs_plugins/newlisp/newlisp-mode/"))(l原创 2013-01-22 11:31:21 · 3959 阅读 · 0 评论 -
newlisp debugger
写了很多newlsip程序,一直都是用println 来打印,查找问题。但是随着程序越来越多,debug就变得越来越重要。今天在实现自己的TEA算法时,就需要调试newlips程序。启动debugger很简单,只需要在newlisp会话中调用:(trace true)然后加载自己的lsp文件,调用函数,就可以进行调试了。不过为了方便,还可以用(debug call-your-function)。下原创 2013-04-06 20:17:53 · 3123 阅读 · 0 评论 -
newlisp宏的简单例子
实用的newlisp宏例子原创 2013-11-04 17:04:33 · 4004 阅读 · 0 评论 -
mongodb newlisp driver v0.1.0 发布
一直以来,没有newlisp直接访问mongodb 的方式,今天发布了v0.1.0版本,可以让newlisp通过mongdb c driver访问mongodb server.下面是例子代码:#!/usr/bin/newlisp(load "mongo.lsp")(mongo:init)(set 'client-ptr (mongo:connect "mongodb://127.0.0.1原创 2014-11-30 17:46:33 · 2593 阅读 · 0 评论 -
用newlisp通过C++动态库访问MongoDB
我想让我的newlisp程序访问MongoDB. 现在已经有MongoDB C driver,但是我没有时间去学习,只想尽快的完成工作。下面是我的方法,用C++创建一个动态库,这个动态库引用了MongoDB C++ driver. 但是会用extern "C" 导出C函数。一件事情必须知道,MongoDB C++ driver必须用-fPIC选项编译。首先,创建db.h文件extern "C" v原创 2013-12-09 18:28:00 · 4205 阅读 · 0 评论 -
newLISP语法
newLISP的最大特点就是语法简单,估计一张纸能说明白最常用的。下面就说几个:define 是用来定义函数的,比如下面定义并使用了一个my-add函数> (define (my-add x) (+ 1 x))(lambda (x) (+ 1 x))> (my-add 4)5(+ 1 x) 是函数体。调用函数上面已经演示过,就是(函数名 参数1 参数2) 这样的形式,比如复制一个文件:>原创 2013-01-15 16:01:39 · 3387 阅读 · 1 评论 -
newLISP symbol
初始化symbolsetsyntax: (set sym-1 exp-1 [sym-2 exp-2 ... ])下面是例子:> (set 'mysymbol "ebd")"ebd"> (upper-case mysymbol)"EBD"上面第一句设置了一个symbol, 值为字符串。第二句使用该symbol。注意此时无需单引号。注意:1. 这里set定义了全局的symbol, 不过只能在当原创 2014-12-21 12:46:35 · 2194 阅读 · 0 评论 -
newLISP数据引用
无法返回引用数据传递包括两种,返回值和参数。很可惜,newlisp的返回值只进行值拷贝,也就是返回副本,并没有方法返回引用。那么看看参数吧,通过参数有两种方法传递引用,一种是通过使用单引号,比如:单引号symbol传递参数引用(define (change-list aList) (push 999 (eval aList)))(set 'data '(1 2 3 4 5)); note原创 2014-12-14 19:53:56 · 2935 阅读 · 0 评论 -
newLISP序列化
newLISP序列化主要是指list表达式如何转换成string,存储在文件或者数据库中。然后读取并转换成list表达式。先看简单的list转换成string(setf a '(1 2 3 4))(1 2 3 4)> (string a)"(1 2 3 4)"string转换成list(list? (eval-string (string "'" b)))true这行代码需要说明一下。需要使用ev原创 2014-12-31 18:12:07 · 2036 阅读 · 0 评论 -
newLISP中的字典类型
newLISP字典类型原创 2014-04-12 17:17:30 · 2838 阅读 · 0 评论 -
在newlisp中使用table-driven模式
table-drvien,在代码大全中有专门一章介绍,大意是如果条件判断太多,根据不同的条件要执行不同的代码逻辑,用if/else很傻,用switch/cae也是一样,用设计模式要设计一大堆类。其实有一个跟简单的做法,就是key/value类型的数据结果,key为条件,value为执行函数。在newlisp中,提供了key/value的接口允许做到table-driven. 下面是个例子:> (n原创 2013-11-22 19:39:19 · 3242 阅读 · 0 评论 -
LISP宏的几点理解
lisp宏的理解原创 2013-11-04 16:28:14 · 7787 阅读 · 0 评论 -
main-args
当编写一个newlisp脚本时,有时候需要传递参数。可以通过(main-args)获取外面穿过來的参数,但是注意:1.参数索引从0开始2.第0个参数是newlisp3.第1个参数是你的脚本文件之后才是你真正要的参数。举个例子,t.lsp文件内容如下:!/usr/bin/newlisp(println (main-args))(exit)现在开始运行:chenshu@chenshu-beiji原创 2013-03-07 20:58:41 · 3185 阅读 · 0 评论 -
newlisp字符表示
在C++语言中,一个字符用单引号括起来,比如'A'但是在newlisp中,单引号用来阻止表达式求值,必须用"A"来表示。下面的测试代码表明'A' 并不是一个字符。> (println "A")A"A"> (println 'A')Anilnil> (println (char 'A'))"\000"> (println (char "A"))6565> 今天写测试代码的时候原创 2013-04-02 23:29:31 · 2729 阅读 · 0 评论 -
修改配置文件
系统运维时有时候需要用脚本来修改配置文件newlisp下如何修改文件呢。下面有个简单的例子,来自别人回答我的问题:(set 'input-file {/tmp/temp.txt})(set 'lines (parse (read-file input-file) "\n"))(replace "ENGINE_HOME=" lines "ENGINE_HOME=/opt/engine_home原创 2013-03-20 18:18:26 · 3341 阅读 · 0 评论 -
let & letn 区别
let 和 letn 都可以同时定义多个局部变量。比如:> (let ((x 1) (y 2)) (list x y)) (1 2)和下面的功能相当:> (letn ((x 1) (y 2)) (list x y)) (1 2)但是,当y的初始值依赖于x时,let不支持这种初始化方式,只能使用letn> (let ((x 1) (y (+ x 2))) (list x y)) ERR原创 2013-04-05 00:19:39 · 9333 阅读 · 0 评论 -
newlisp的lambda表达式
定义lambda表达式指的是一个匿名函数,可以将之作为参数传递给map等容器,然后被容器内部调用之。newlisp的官方文档在这里:http://www.newlisp.org/downloads/manual_frame.html缩写参考lambda一节,说其和fn相同,fn是其更方便的简写。下面的两个例子分别使用了lambda和fn,效果完全一样。它们都对map中的list做了加法操作。> (原创 2013-04-04 10:27:17 · 3707 阅读 · 0 评论 -
S-expression
夜深了,还在继续修炼自己的lisp。S-expression实际上就是symbolic expression的缩写。可以是一个atom 或者一个括号组成的list, 比如(x y), x 和 y也可以是S-expresssion一般用二叉树来实现S-expression, 比如,下面的来自wiki中的例子:http://en.wikipedia.org/wiki/S-expressionTree原创 2013-04-04 00:03:53 · 7118 阅读 · 0 评论 -
newlisp set 函数
用set拷贝先看最简单的set, 它可以对一个或者多个symbol设置值。> (set 'm "h")"h"注意,上面的语句是将"h"复制一份赋给m symbol. 这是拷贝,不是引用。现在通过下面的测试证明:> (set 'm "h")"h"> (set 'n m)"h"> (set 'm "a")"a"> n"h"> m"a"当m的值复制给了n后,修改m,不会改变n的值。s原创 2013-04-05 14:57:30 · 3066 阅读 · 0 评论 -
setq & setf
功能这两个函数其实是一个,只是逻辑上用在不同的场合。setq用于给symbol的reference设置,而setf用于设置list 或者 array的reference.setq的使用setq比较简单,避免了在使用set的时候用‘来阻止表达式求值。> (setq x "hello")"hello"> x"hello"setf的使用> (setq L '(a b (c d) e f g))(原创 2013-04-05 16:23:59 · 5884 阅读 · 0 评论 -
newlisp 使用crypto模块
先从这里下载crypto.lsp文件:http://www.newlisp.org/code/modules/crypto.lsp.html然后在Ubuntu12.04/12.10 amd64下安装需要的库:apt-get install libssl0.9.8之后创建一个链接:ln -s /lib/x86_64-linux-gnu/libcrypto.so.0.9.8 /usr/lib/32位系原创 2013-01-24 23:53:25 · 2534 阅读 · 0 评论 -
用curl自动登录HTTPS站点
前文http://blog.csdn.net/sheismylife/article/details/9237925 演示了如何手动的通过运行curl命令登录HTTPS站点,然后获取cookie, 再拼凑一个命令加上cookie访问网站其他的页面。通过newlisp编程可以将第一个命令输出的结果用正则表达式过滤出其中的cookie,然后发出请求。下面是代码:#!/usr/bin/newlisp原创 2013-07-03 23:49:54 · 6813 阅读 · 0 评论 -
newlips全局symbol
定义一个symbol在某个lisp文件中,;; config.lsp(set 'java-home "C:\\Program Files\\Java\\jdk1.6.0_41")(set 'glassfish-home "C:\\portal\\glassfish")(set 'cloud-engine-home "C:\\cloud_engine")然后再在另一个lisp文件中加载这个l原创 2013-04-02 11:04:32 · 2824 阅读 · 0 评论 -
newlisp 异常
throw 和 throw-error的比较相同点:两者都能造成代码退出当前运行块,如果调用者没有使用catch,都能造成程序退出。不同点:逻辑上throw-error是因为错误退出。而throw可以类似于其他语言中的return语句,但是必须用catch配合。下面的测试代码用catch检测返回的错误信息,如果有错误信息,则显示并退出程序,如果没有错误信息,则显示成功: (unless (c原创 2013-04-03 22:18:56 · 3009 阅读 · 0 评论