print\princ\prin1内容的区分
本帖最后由 敖沧海 于 2025-8-22 11:03 编辑;欢迎大家补充或者提建议,让我更能理解他们的不同(defun c:t0 ()
(setq a 123 b '(a)) ;只显示了(A)把整数123赋予a 把表(a)赋予b
)
(defun c:t1 ()
(setq a 123 b '(a)) ;把整数123赋予a 把表(a)赋予b
(princ) ;什么都不显示
)
(defun c:t2 ()
(setq a 123 b '(a)) ;把整数123赋予a 把表(a)赋予b
(princ a) ;显示为123123前者为打印值 后者为返回值
)
(defun c:t3 ()
(setq a 123 b '(a)) ;把整数123赋予a 把表(a)赋予b
(princ a) ;显示为123123前者为打印值 后者为返回值
(princ) ;显示为123
)
;此时把(princ)移到函数外部,结果如下
(defun c:t4 ()
(setq a 123 b '(a)) ;把整数123赋予a 把表(a)赋予b
)
(princ) ;输入命令后才显示了(A),但与上面不同的是加载后不显示c:t4
(defun c:t5 ()
(setq a 123 b '(a)) ;把整数123赋予a 把表(a)赋予b
)
(princ a) ;不输入命令直接显示为123123前者为打印值 后者为返回值输入T5,显示(A)
(defun c:t6 ()
(setq a 123 b '(a)) ;把整数123赋予a 把表(a)赋予b
(princ a) ;显示为123123前者为打印值 后者为返回值
)
(princ) ;什么都不显示输入T6,显示为123123
(defun c:t7 ()
(setq a 123 b '(a)) ;把整数123赋予a 把表(a)赋予b
)
(princ a) ;显示为123123前者为打印值 后者为返回值
(princ) ;显示123输入T7,显示为(A)
;最后(princ)替换为(prin1),结果一样
;最后(princ)替换为(print),结果T2 T5 T6在123123中加了一个空格
;故不区分三个命令。
_$ (princ "这是\n换行")
这是
换行"这是\n换行"
_$ (prin1 "这是\n换行")
"这是\n换行""这是\n换行"
_$ (print "这是\n换行")
"这是\n换行" "这是\n换行"
_$
princ可以输出控制符,比如换行,
prin1是原样输出,双引号都在,
print也是原样输出,只是额外输出了一些字符,前面命令空了一行,其次和后面的返回值也有一个空格.
所有函数执行都有返回值,defun也不例外,所以执行defun的函数也会返回最后的表达式的值.
通常在不需要返回值的defun使用(princ)来输出一个空返回.
下载看看 怎么回事 谢谢分享:handshake edata 发表于 2025-8-22 12:14
_$ (princ "这是\n换行")
这是
换行"这是\n换行"
原来如此,我寻思,为什么每个程序都要加个princ呢,不加就会输出两遍结果,原来是defun也有返回值,这就合理了
页:
[1]