如何在 LISP 中的一行上写两个值?
How to write two values on one line in LISP?
我是 LISP 新手,刚开始自学。我想使用 write-line
并排打印 p
的值。我想看到的是 p=x
:
(setq p 10987)
(write-line "p=")
(write p)
结果如下所示:
p=
10987
我想达到p=10987
同线
(setq p 10987)
(write-line (format nil "p=~a" p))
不需要将write-line
与format
一起使用;单独使用 format
。
请注意,setq
和 setf
用于 现有 变量的突变;它们不打算建立新的绑定,并且 Common Lisp 规范没有为发布的代码定义任何行为。通常实现会按照您的预期进行,但不要尝试在重要的代码中使用 setq
或 setf
来定义新变量。在这种情况下,某些实现(例如 SBCL)会发出警告。
建立新绑定的常用方法包括 defvar
、defparameter
或 let
:
CL-USER> (defparameter *p* 10987)
*P*
CL-USER> (format t "*p*=~A~%" *p*)
*p*=10987
NIL
此处 defparameter
建立到 *p*
的绑定; setf
或 setq
现在可用于更新此绑定。请注意,*p*
有 耳套,它们通常在 Common Lisp 中用于指示动态作用域变量。
format
的第一个参数指定输出目标。如果是t
,那么输出到*standard-output*
; if nil
then format
returns 一个字符串结果。您还可以指定一个特定的流,或一个带有填充指针的现有字符串作为目标。 ~A
in the call to format
is the aesthetic directive, which usually does what you want when your goal is to print a value for a person to read. The ~%
指令导致 format
发出换行符;有了这个,根本不需要使用 write-line
。
另一种(更笨拙的)方法是使用 princ
and terpri
:
CL-USER> (let ((p 10987))
(princ "p=")
(princ p)
(terpri))
p=10987
NIL
这里 p
是一个局部范围的变量,因此没有耳罩。 princ
用于以人类可读的形式打印对象,但它不发出换行符。神秘命名的 terpri
发出换行符。
我是 LISP 新手,刚开始自学。我想使用 write-line
并排打印 p
的值。我想看到的是 p=x
:
(setq p 10987)
(write-line "p=")
(write p)
结果如下所示:
p=
10987
我想达到p=10987
同线
(setq p 10987)
(write-line (format nil "p=~a" p))
不需要将write-line
与format
一起使用;单独使用 format
。
请注意,setq
和 setf
用于 现有 变量的突变;它们不打算建立新的绑定,并且 Common Lisp 规范没有为发布的代码定义任何行为。通常实现会按照您的预期进行,但不要尝试在重要的代码中使用 setq
或 setf
来定义新变量。在这种情况下,某些实现(例如 SBCL)会发出警告。
建立新绑定的常用方法包括 defvar
、defparameter
或 let
:
CL-USER> (defparameter *p* 10987)
*P*
CL-USER> (format t "*p*=~A~%" *p*)
*p*=10987
NIL
此处 defparameter
建立到 *p*
的绑定; setf
或 setq
现在可用于更新此绑定。请注意,*p*
有 耳套,它们通常在 Common Lisp 中用于指示动态作用域变量。
format
的第一个参数指定输出目标。如果是t
,那么输出到*standard-output*
; if nil
then format
returns 一个字符串结果。您还可以指定一个特定的流,或一个带有填充指针的现有字符串作为目标。 ~A
in the call to format
is the aesthetic directive, which usually does what you want when your goal is to print a value for a person to read. The ~%
指令导致 format
发出换行符;有了这个,根本不需要使用 write-line
。
另一种(更笨拙的)方法是使用 princ
and terpri
:
CL-USER> (let ((p 10987))
(princ "p=")
(princ p)
(terpri))
p=10987
NIL
这里 p
是一个局部范围的变量,因此没有耳罩。 princ
用于以人类可读的形式打印对象,但它不发出换行符。神秘命名的 terpri
发出换行符。