List 仅通过使用cons汽车cdr

List 仅通过使用cons汽车cdr,list,functional-programming,scheme,List,Functional Programming,Scheme,如何仅使用以下三个函数从列表中获取第2到第7个元素: cons car cdr 榜样 > (two-to-seven (list 8 9 5 1 0 3 6 2 4)) > (9 5 1 0 3 6) 谢谢。我的解决方案。您可能希望使用1初始化acumulator(acum),和/或使用=和acum start))(cons(car lst)(take elems(cdr lst)(+1 acum))) > (define (t2s xs) (cons (car

如何仅使用以下三个函数从列表中获取第2到第7个元素:

  • cons
  • car
  • cdr
榜样

> (two-to-seven (list 8 9 5 1 0 3 6 2 4))
> (9 5 1 0 3 6)

谢谢。

我的解决方案。您可能希望使用1初始化acumulator(
acum
),和/或使用
=
acum start))(cons(car lst)(take elems(cdr lst)(+1 acum)))
> (define (t2s xs)
    (cons (car (cdr xs)) (cons (car (cdr (cdr xs))) (cons (car (cdr (cdr (cdr xs)))) (cons (car (cdr (cdr (cdr (cdr xs))))) (cons (car (cdr (cdr (cdr (cdr (cdr xs)))))) (cons (car (cdr (cdr (cdr (cdr (cdr (cdr xs))))))) (list))))))))
> (t2s (list 8 2 5 4 0 3 6 1 1))
(2 5 4 0 3 6)
(其他(以elems lst(+1 acum(())))为例) (以elems(linarize tlst)0为例)
您能给出一个输出示例吗?(cons(cadr-xs)(cons(caddr-xs)(cons(cadddr-xs)(cons(car(cdddr-xs))(cons(cadr(cdddr-xs))empty()()())())))稍短一点:P@nvm:是的,稍微短一点,但不再符合“仅限
cons
car
cdr
”要求:-P@Chris杰斯特·杨:我也没有接受literally@borku:您可以使用
”()
代替
(列表)
。它们是相同的。@博尔库:是的,你可以,也可以把这个答案标记为一个解决方案,谢谢你,但任务是通过使用CARS、CONS和CDR来解决这个问题。
(define (test-get start stop tlst)
(define acum 0)
(define (get-elems lst)
    (cond ((null? lst) empty)
          ((and (symbol? (car lst))
                (< acum stop)
                (> acum start))
                    (set! acum (+ 1 acum)) 
                    (cons (car lst) (get-elems (cdr lst))))
          ((symbol? (car lst)) 
                (set! acum (+ 1 acum))
                (get-elems (cdr lst)))
          (else (append (get-elems (car lst)) (get-elems (cdr lst))))))

  (get-elems tlst))
> (test-get 0 3 '(a (b) (c (d)) e (((f))) (h (i (j))) (k l)))
(b c)
> (test-get 2 6 '(a (b) (c (d)) e (((f))) (h (i (j))) (k l)))
(d e f)
> (test-get 2 7 '(a (b) (c (d)) e (((f))) (h (i (j))) (k l)))
(d e f h)
(define (my-append l1 l2)
    (if (null? l1)
      l2
      (cons (car l1) (my-append (cdr l1) l2))))
(define (test-get start stop tlst)
(define (liniarize lst)
    (cond ((null? lst) empty)
          ((symbol? (car lst)) (cons (car lst) (liniarize (cdr lst))))
          (else (my-append (liniarize (car lst)) (liniarize (cdr lst))))))

(define (take-elems lst acum)
    (cond ((null? lst) empty)
          ((and (< acum stop)
                (> acum start)) (cons (car lst) (take-elems (cdr lst) (+ 1 acum))))
          (else (take-elems lst (+ 1 acum))))) 


  (take-elems (liniarize tlst) 0))