0
(define (getFirstFew lst)
  (cond
  ((= (read) 0) '()) ;returns nothing
  (else(cons (car lst)(getFirstFew (cdr lst)(- (read) 1))))))

那是我上面的代码。所以我正在尝试编写一个程序,该程序将从列表中获取第一个 x 元素(用户可以选择 x 成为什么)。例如,带有 (getFirstFew '(1 6 2 4 5)) 的输入 4 将导致 '(1 6 2 4)。

我目前的问题是,使用 read 两次,它被调用两次然后中断程序。有没有办法让我将用户输入的任何内容存储到变量中,然后在整个程序中使用该变量?或者这个问题有其他解决方案吗?

4

1 回答 1

1

请注意,您必须read只执行一次,并存储该值以供将来参考。通常我们会let为此使用 a,但考虑到我们还必须遍历列表并x在每次迭代时递减,命名let会更合适。尝试这个:

(define (getFirstFew lst)
  (let loop ((lst lst) (x (read)))
    (if (= x 0)
        '()
        (cons (car lst)
              (loop (cdr lst) (- x 1))))))

它按预期工作:

(getFirstFew '(1 6 2 4 5))
> 4
=> '(1 6 2 4)
于 2015-11-14T00:31:23.673 回答