无聊的宏-非S表达式算术表达式
lisp吧
全部回复
仅看楼主
level 3
有时候简单运算sexp还是有点难读,写了个宏可以以日常方式写算术表达式。(支持变量)
形如(ca 1 + 2 +(3 * 5 (+ 1 17)* 3))
下载
网盘链接
(好吧我承认由于空格要求严格的原因只是可读性好实际上不好写。。。)
----什么烂排版
(define-syntax ca (syntax-rules () ( (ca tail ...) (caa () tail ...))))(define-syntax caa (syntax-rules () ((caa (list ...)(list2 ...) tail ...) (caa (list ... (ca list2 ...))tail ...)) ((caa (list ...)atom tail ...) (caa (list ... atom)tail ...)) ((caa (list ...)) (cab () list ...))))(define-syntax cab (syntax-rules (* /) ((cab (list ...)atom1 * atom2 tail ...) (cab (list ...)(* atom1 atom2) tail ...)) ((cab (list ...)atom1 / atom2 tail ...) (cab (list ...)(/ atom1 atom2) tail ...)) ((cab (list ...) atom other tail ...) (cab (list ... atom other)tail ...)) ((cab (list ...)end) (cac list ... end))))(define-syntax cac (syntax-rules (+ -) ((cac a1 + a2 tail ...) (cac (+ a1 a2)tail ...)) ((cac a1 - a2 tail ...) (cac (- a1 a2)tail ...)) ((cac (list ...)) (list ...)) ((cac divnum)(quote divnum))))
2013年09月06日 11点09分 1
level 3
1l的例子正是写错的典范(看出来了吗。。这正是无可救药之处),正确写法应该是这个
(ca 1 + 2 +(3 * 5 +(1 + 17)* 3))
2013年09月06日 11点09分 2
level 2
没必要啊。。。
2013年10月12日 06点10分 5
1