如何将用户输入存储到Scheme的列表中?

时间:2019-05-02 11:15:59

标签: scheme racket

我需要能够接受用户的输入(将其存储在列表中)并将其打印到屏幕上,以证明它已存储在列表中,或者如果列表包含的元素不是数。然后的想法是在另一个函数中使用该函数的结果,该函数的总和(我已经完成了该函数)。我一直到处寻找,在Scheme中找不到有关如何执行此操作的任何信息。我知道必须使用let,但是我不确定如何实现。

(read-user-ints)

=> 1

=> 2

=> 3

=> 4

=> 5

=> e

(1 2 3 4 5)

1 个答案:

答案 0 :(得分:1)

首先将e定义为空列表。

(define e '())

然后您可以对READ使用递归循环来获取整数,每次获取整数时,都可以将其附加到列表的末尾,如下所示:

(set! e (append e (list number)))

如果您在LET部分上挣扎,则可以执行以下操作

(let loop ((number (read)))
    ;; check if number is actually a number or if it's 'e'
    ;; either append it or exit the loop (by not calling loop)
    )

回答您的后续评论。

您可以使用BEGIN将多个语句放在IF表达式的一个分支中,如下所示:

(define read-int-list
  (lambda ()
    (let loop ((number (read)))
      (if (number? number)
          (begin (set! e (append e (list number)))
                 (loop))
          'done
          ))))