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