Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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
List Scheme中列表的前5个元素_List_Scheme_Racket - Fatal编程技术网

List Scheme中列表的前5个元素

List Scheme中列表的前5个元素,list,scheme,racket,List,Scheme,Racket,我想知道,是否给了我一份清单,如: (list 3 6 9 2 1 0 5 9) 我只想制作前5部。i、 e:我想制作: (list 3 6 9 2 1) 我怎么能这样做呢。顺便说一句,递归是不允许的,语言也是。谢谢:)如果内存可用,除了car和cdr之外,Scheme还提供caar、caaar、caaaar和等效的重复ds以及各种组合和排列。因此,一个解决方案是: (define x (list 3 6 9 2 1 0 5 9)) (list (car x) (cadr x) (cad

我想知道,是否给了我一份清单,如:

 (list 3 6 9 2 1 0 5 9)
我只想制作前5部。i、 e:我想制作:

 (list 3 6 9 2 1)

我怎么能这样做呢。顺便说一句,递归是不允许的,语言也是。谢谢:)

如果内存可用,除了
car
cdr
之外,Scheme还提供
caar
caaar
caaaar
和等效的重复
d
s以及各种组合和排列。因此,一个解决方案是:

(define x (list 3 6 9 2 1 0 5 9))
(list (car x) (cadr x) (caddr x) (cadddr x) (car (cddddr x)))
(我敢肯定这就是为什么你被要求参加前五名;没有
cdddddr
——教学重点很可能是允许重复
d
s和
a
s,以及你可以使用它们的限制)

实际上类似于
(1234)
的lis是一条成对的链子
(1.(2.(3.(4)())
)。由于需要第5对指向
()
(null)而不是对链的其余部分,因此不能重用对。唯一的方法是,通过在每个元素中使用相同的
car
元素,为每个元素创建一个新的

(define (take lst cnt)
  (if (zero? cnt)               ; if you ask for zero element
      '()                       ; then return empty list
      (cons (car lst)           ; else make a pair with first element
            (take (cdr lst)     ; and result from take with the rest of the list
                  (- cnt 1))))) ; with one less element than you originally asked for

我不知道您为什么要这样做,但避免递归的一种方法是展开循环:

(define (take1 xs) (cons (car xs) '()))
(define (take2 xs)
   (cons (car xs) (take1 (cdr xs))))
(define (take3 xs)
   (cons (car xs) (take2 (cdr xs))))
(define (take4 xs)
   (cons (car xs) (take3 (cdr xs))))
(define (take5 xs)
   (cons (car xs) (take4 (cdr xs))))

还有
第一个
第二个
第三个
第四个
第五个
,等等。这是一个解决方案,但我需要这个解决方案来处理任何长度的列表和我想要保留的任何数量的元素。@IanMurphy你要求我们在Scheme中做一个循环。。。没有递归?递归是在Scheme中形成循环的方式。例如,如果我告诉它,同一个函数必须能够接受(列表1234567891011)并产生(列表12),如果我认为你误解了赋值。也许可以问问你的同学们?这是一段理智的代码,但作者指定“不允许递归”。但是,不,我认为也不可能满足这个约束条件。请投票,因为忽略递归注释可能比我的答案更有意义,因为我的答案忽略了良好的编程意义(我假设这是一个教学练习)。这是带lambda的中级学生还是不带lambda的中级学生?我想这可能离题了,因为你要求我们做作业,而且作业也不有趣。