gpt4 book ai didi

return - 函数输出一个列表但返回 nil

转载 作者:太空宇宙 更新时间:2023-11-03 18:57:30 25 4
gpt4 key购买 nike

我调用一个函数,它输出一个列表,我想在之后使用。我尝试将函数的输出绑定(bind)到一个变量,但它被分配的不是列表,而是 NIL

我的调用和输出(观察输出中的换行符):

(nqthm-eval `(myghs 1 NIL ,g1)) ==> '(T (B . E) (D . D))

当我尝试将此输出绑定(bind)到变量 v 时,它被分配了 NIL:

(setq v (nqthm-eval `(myghs 1 NIL ,g1))) ==> '(T (B . E) (D . D))
NIL

之后的平等检查确实给出了:

(equal v NIL) ==> T

在我看来,对nqthm-eval 的函数调用是输出 列表并返回 NIL,尽管我对 LISP 的了解还不够。

我的问题:有没有办法像 (car (nqthm-eval ...))(get_output (nqthm-eval ...)) 来自“外部”?

最佳答案

函数的返回值与其输出之间存在差异。

返回值就是value (or values)最后一种形式并被 setq 捕获等

输出被发送到一个流,并且只能从中捕获。

例如,

(defun foo1 (x)
(princ (1+ x))
(1- x))
(foo1 12)

将打印 13 并返回 11

如果你想同时捕获两者,你需要

(defun foo2 (x)
(values (1+ x) (1- x)))
(setf (values a b) (foo2 17))

现在 a18b16

附言。实际上,如果您无法控制函数源代码,但仍想捕获其输出,如果您知道它将其输出发送到何处,则可以这样做。例如:

(setq b (with-output-to-string (*standard-output*)
(setq a (foo1 1))))

现在 b"2"(一个 string!)而 a0(一个数字!)

关于return - 函数输出一个列表但返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58081417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com