函数输出一个列表但是 returns nil
Function outputs a list but returns nil
我调用了一个函数,它输出一个列表,我想在之后使用。我尝试将函数的输出绑定到一个变量,但它没有分配给列表 NIL
.
我的调用和输出(观察输出中的换行符):
(nqthm-eval `(myghs 1 NIL ,g1)) ==> '(T (B . E) (D . D))
当我尝试将此输出绑定到变量 v
时,它被分配 NIL
:
(setq v (nqthm-eval `(myghs 1 NIL ,g1))) ==> '(T (B . E) (D . D))
NIL
之后的平等检查确实给出了:
(equal v NIL) ==> T
在我看来,对 nqthm-eval
的函数调用是 输出 列表和 返回 NIL
, 虽然我对 LISP 的理解还不够。
我的问题: 有没有办法从我的函数中获取 output/return 的列表部分,例如 (car (nqthm-eval ...))
或 (get_output (nqthm-eval ...))
'outside'?
函数的return值与其输出之间存在差异。
return 值只是 value (or values) of the last form and is captured by setq
等
输出被发送到流并且只能从流中捕获。
例如,
(defun foo1 (x)
(princ (1+ x))
(1- x))
(foo1 12)
将打印 13
和 return 11
.
如果你想同时捕获两者,你需要
(defun foo2 (x)
(values (1+ x) (1- x)))
(setf (values a b) (foo2 17))
现在 a
是 18
而 b
是 16
。
PS。实际上,如果您无法控制函数源代码并且仍想捕获其输出,您可以这样做 if you know where it发送它的输出。例如:
(setq b (with-output-to-string (*standard-output*)
(setq a (foo1 1))))
现在 b
是 "2"
(一个 string
!)而 a
是 0
(一个 number
!)
我调用了一个函数,它输出一个列表,我想在之后使用。我尝试将函数的输出绑定到一个变量,但它没有分配给列表 NIL
.
我的调用和输出(观察输出中的换行符):
(nqthm-eval `(myghs 1 NIL ,g1)) ==> '(T (B . E) (D . D))
当我尝试将此输出绑定到变量 v
时,它被分配 NIL
:
(setq v (nqthm-eval `(myghs 1 NIL ,g1))) ==> '(T (B . E) (D . D))
NIL
之后的平等检查确实给出了:
(equal v NIL) ==> T
在我看来,对 nqthm-eval
的函数调用是 输出 列表和 返回 NIL
, 虽然我对 LISP 的理解还不够。
我的问题: 有没有办法从我的函数中获取 output/return 的列表部分,例如 (car (nqthm-eval ...))
或 (get_output (nqthm-eval ...))
'outside'?
函数的return值与其输出之间存在差异。
return 值只是 value (or values) of the last form and is captured by setq
等
输出被发送到流并且只能从流中捕获。
例如,
(defun foo1 (x)
(princ (1+ x))
(1- x))
(foo1 12)
将打印 13
和 return 11
.
如果你想同时捕获两者,你需要
(defun foo2 (x)
(values (1+ x) (1- x)))
(setf (values a b) (foo2 17))
现在 a
是 18
而 b
是 16
。
PS。实际上,如果您无法控制函数源代码并且仍想捕获其输出,您可以这样做 if you know where it发送它的输出。例如:
(setq b (with-output-to-string (*standard-output*)
(setq a (foo1 1))))
现在 b
是 "2"
(一个 string
!)而 a
是 0
(一个 number
!)