cabinsummer 发表于 2012-1-12 07:18
LISP处理表的功能很强大了,楼主是要正则还是要计算?
已经有了思路,还没完全验证正确- (defun MulOrDivCalOrder (NorSLst1)
- (cond
- ((<= (length NorSLst1) 2) NorSLst1)
- ((member (cadr NorSLst1) '(* /))
- (MulOrDivCalOrder (cons (eval (list (cadr NorSLst1) (car NorSLst1) (caddr NorSLst1) 1.0)) (cdddr NorSLst1)))
- )
- (T (cons (car NorSLst1) (MulOrDivCalOrder (cdr NorSLst1))))
- )
- )
- (defun AddOrSubCalOrder (NorSLst2)
- (cond
- ((<= (length NorSLst2) 2) NorSLst2)
- ((member (cadr NorSLst2) '(+ -))
- (AddOrSubCalOrder (cons (eval (list (cadr NorSLst2) (car NorSLst2) (caddr NorSLst2))) (cdddr NorSLst2)))
- )
- (T (cons (car NorSLst2) (AddOrSubCalOrder (cdr NorSLst2))))
- )
- )
- (defun listCalOrder (NorSLst0)
- (cond
- ((not NorSLst0) NorSLst0)
- (T (if (vl-some 'listp NorSLst0)
- (car (AddOrSubCalOrder (MulOrDivCalOrder (mapcar (function (lambda (x) (if (listp x) (listCalOrder x) x))) NorSLst0))))
- (car (AddOrSubCalOrder (MulOrDivCalOrder NorSLst0)))
- )
- )
- )
- )
对于正则,你的思路是什么? |