菜卷鱼 发表于 2020-8-27 14:47:59

代码查错程序,源码

本帖最后由 菜卷鱼 于 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)
)




菜卷鱼 发表于 2020-8-29 08:47:28

angel066499 发表于 2020-8-28 20:43
没有这个函数哦prlst

OK,附上了

paulpipi 发表于 2020-9-3 10:00:14

真牛,不过不会用

999999 发表于 2020-8-28 20:06:39

谢谢楼主分享,,对小白还是有用处,不知道错在哪,,

菜卷鱼 发表于 2020-10-10 09:11:11

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))

angel066499 发表于 2020-8-28 20:43:47

没有这个函数哦prlst

yoyoho 发表于 2020-8-27 22:27:23

谢谢! 菜卷鱼 分享程序!!!!!

664571221 发表于 2020-8-28 09:07:32

老师是干嘛用的呀

菜卷鱼 发表于 2020-8-28 09:33:39

664571221 发表于 2020-8-28 09:07
老师是干嘛用的呀

就是你写了一长串代码,你怕出错又不知道错在哪一句,你就用这个程序把你的程代码套一下,有错误就会报警,但是这个代码比较简单,能够查简单的错误,复杂的没测试过

hhh454 发表于 2020-8-28 11:16:06

这个有意思,感谢楼主分享

angel066499 发表于 2020-8-31 22:45:40

菜卷鱼 发表于 2020-8-29 08:47
OK,附上了

谢谢:P,查一下程序还是很方便的

czb203 发表于 2020-9-3 07:46:00

很牛逼的样子哦
页: [1] 2 3
查看完整版本: 代码查错程序,源码