方案列表操作错误


(define (create-polygon ptlist)
  (if (null? ptlist) '()
      (cons (cons (car ptlist) (cadr ptlist)) (create-polygon (cdr ptlist)))))
(define (newlist ptlist)
  (append ptlist (car ptlist)))
(define test-points                   
  (list p1 p2 p3 p4 p5 p6))   
(create-polygon test-points)

我正在尝试列出多边形边的坐标。 p1,p2 是一些点,例如 (0 0)。最终结果应该是 ((p1 p2) (p2 p3) (p3 p4) (p4 p5) (p5 p6) (p6 p1))。我浪费了很多时间试图找出是什么给了我一个错误。以及为什么它会给出错误。我在这里做错了什么?

这是我午休时间的一些有趣的手指练习。

Petite Chez Scheme Version 8.4
Copyright (c) 1985-2011 Cadence Research Systems
> (define test-points '(p1 p2 p3 p4 p5 p6))
> (define (rotate xs) (append (cdr xs) (list (car xs))))
> (define (create-polygon ptlist)
    (map list ptlist (rotate ptlist)))
> (create-polygon test-points)
((p1 p2) (p2 p3) (p3 p4) (p4 p5) (p5 p6) (p6 p1))

我的rotate函数执行我认为您尝试使用newlist函数执行的操作。在create-polygon中,我使用了map高阶函数来执行您对递归所做的工作。

最新更新