Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lisp-从输入读取和存储2个值_Lisp_Common Lisp - Fatal编程技术网

Lisp-从输入读取和存储2个值

Lisp-从输入读取和存储2个值,lisp,common-lisp,Lisp,Common Lisp,我想使用lisp从用户输入中读取2个值。我想将这些存储在变量中,以便在程序中使用它们 到目前为止,我拥有当前代码: (defun le-posicao() (let ((n_anel) (pos_anel)) (princ "?") (setf n_anel (read)) (setf pos_anel (read)) (when (and (integerp (n_anel)) (integerp (pos_anel)))

我想使用lisp从用户输入中读取2个值。我想将这些存储在变量中,以便在程序中使用它们

到目前为止,我拥有当前代码:

(defun le-posicao()
  (let ((n_anel) 
        (pos_anel))
    (princ "?")
    (setf n_anel (read))
    (setf pos_anel (read))
    (when (and (integerp (n_anel)) (integerp (pos_anel)))
          n_anel pos_anel)))
我使用let函数创建局部变量,然后我想将从输入中读取的值存储在其中

我的问题是,如何从输入中读取两个值,并将第一个值存储在一个变量中,第二个值存储在另一个变量中?这些值应采用以下格式:

? value1 value2

有人能帮帮我吗?

您正试图强制使用Lisp。虽然这是可能的,但可能会有点痛

为了使代码更具功能性,您应该创建名称并将值绑定到它们,而不是创建变量然后对其进行变异

澄清一下,
let
是一种特殊形式,而不是函数;它们用于创建名称到值的词汇范围绑定

我相信你真正想做的是:

(let ((n_anel (read))
      (pos_anel (read)))
  (... code using but not modifying n_anel and pos_anel ...))
此代码避免了
setf


注:

不确定Common Lisp的
let
中的括号——我最近一直在使用Clojure


也不确定您是否正确使用了
阅读

您试图强制使用Lisp。虽然这是可能的,但可能会有点痛

为了使代码更具功能性,您应该创建名称并将值绑定到它们,而不是创建变量然后对其进行变异

澄清一下,
let
是一种特殊形式,而不是函数;它们用于创建名称到值的词汇范围绑定

我相信你真正想做的是:

(let ((n_anel (read))
      (pos_anel (read)))
  (... code using but not modifying n_anel and pos_anel ...))
此代码避免了
setf


注:

不确定Common Lisp的
let
中的括号——我最近一直在使用Clojure


也不确定您是否正确使用了
读取

使用此方法,我只能从输入中读取最后一个值。我想将第一个值存储在n_anel变量中,将第二个值存储在pos_anel上。问题是我没有返回包含两个值的列表,因此只能看到最后一个值。现在问题解决了,非常感谢。你应该使用
let*
而不是
let
let
并行执行绑定,
let*
顺序执行绑定。使用此方法,我只能从输入中读取最后一个值。我想将第一个值存储在n_anel变量中,将第二个值存储在pos_anel上。问题是我没有返回包含两个值的列表,因此只能看到最后一个值。现在问题解决了,非常感谢。你应该使用
let*
而不是
let
let
并行执行绑定,
let*
按顺序执行绑定。