微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 LISP 的一行中写入两个值?

如何解决如何在 LISP 的一行中写入两个值?

我是 LISP 的新手,刚刚开始自学。我想使用 p 并排打印 write-line 的值。我想看到的是p=x

(setq p 10987)

(write-line "p=")
(write p)

结果如下:

p=
10987

我想在同一行中实现 p=10987

解决方法

无需将write-lineformat一起使用;只需单独使用 format

请注意,setqsetf 用于改变现有变量;它们不是为了建立新的绑定,并且 Common Lisp 规范没有为发布的代码定义任何行为。通常,实现会按照您的预期执行,但不要尝试在重要代码中使用 setqsetf 定义新变量。在这种情况下,某些实现(例如 SBCL)会发出警告。

建立新绑定的常用方法包括 defvardefparameterlet

CL-USER> (defparameter *p* 10987)
*P*
CL-USER> (format t "*p*=~A~%" *p*)
*p*=10987
NIL

此处 defparameter 建立到 *p* 的绑定; setfsetq 现在可用于更新此绑定。请注意,*p* 具有耳罩,通常在 Common Lisp 中使用它来表示动态范围的变量。

format 的第一个参数指定输出目的地。如果是t,则输出到*standard-output*; if nil then format 返回一个字符串结果。您还可以指定特定流或带有填充指针的现有字符串作为目标。调用 format 中的 ~A 是美学指令,当您的目标是打印一个值供人们阅读时,它通常会执行您想要的操作。 ~% 指令导致 format 发出换行符;有了这个,根本不需要使用 write-line

另一种(更笨拙)的方法是使用 princterpri

CL-USER> (let ((p 10987))
           (princ "p=")
           (princ p)
           (terpri))
p=10987
NIL

这里的 p 是一个局部作用域变量,因此没有耳罩。 princ 用于以人类可读的形式打印对象,但它不会发出换行符。神秘命名的 terpri 发出换行符。

,
(setq p 10987)
(write-line (format nil "p=~a" p))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。