代码查错程序,源码
本帖最后由 菜卷鱼 于 2022-8-31 15:51 编辑用法
(run
'(
(表达式1)
(表达式2)
(表达式3)
......
)
)
举例1
原表达式
(setq a 1 )
(setq b a )
(setq c d)
查错
(run '(
(setq a 1 )
(setq b a )
(setq c d)
)
)
==>
(1 1 nil)
举例2
原表达式
(setq a 1 )(seqq b a )(setq c d)
查错
命令: (run '((setq a 1 )(seqq b a )(setq c d)))
==>
共3个表达式
运行到第2个时报错
报错代码: (SEQQ B A)
报错原因: "no function definition: SEQQ"
举例3
原表达式
(setq a 2)(setq b a )(setq c d) (if a)
查错
命令: (run '((setq a 2)(setq b a )(setq c d) (if a)))
==>
共4个表达式
运行到第4个时报错
报错代码: (IF A)
报错原因: "语法错误"
(defun prlst (lst)
(if (not (listp lst))
(setq lst (list lst))
)
(setq lst (eval (cons list lst)))
(mapcar 'princ lst)
(prin1)
)
angel066499 发表于 2020-8-28 20:43
没有这个函数哦prlst
OK,附上了 真牛,不过不会用 谢谢楼主分享,,对小白还是有用处,不知道错在哪,, Zrrrrr 发表于 2020-10-8 22:40
请问(setq lst (eval (cons list lst)))是为了做什么呢?
为了写局部变量的时候可以用' (...) 代替 (list ... ) 做成表
比如
(setq a 1 b 2 c 3)
(mapcar 'princ'(a b c ))
返回ABC
(mapcar 'princ(eval (cons list'(a b c))))
就会返回123
你直接写,肯定更费力,但是用于局部变量,就好用多了
像我附上的那个 prlst
就可以 (prlst '(a b c)) ,(prlst (list a b c))也行
如果没加上 (eval (cons list lst)) 这一句
就必须得 (prlst (list a b c))
没有这个函数哦prlst 谢谢! 菜卷鱼 分享程序!!!!! 老师是干嘛用的呀 664571221 发表于 2020-8-28 09:07
老师是干嘛用的呀
就是你写了一长串代码,你怕出错又不知道错在哪一句,你就用这个程序把你的程代码套一下,有错误就会报警,但是这个代码比较简单,能够查简单的错误,复杂的没测试过 这个有意思,感谢楼主分享 菜卷鱼 发表于 2020-8-29 08:47
OK,附上了
谢谢:P,查一下程序还是很方便的 很牛逼的样子哦