(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
高阶函数来执行您对递归所做的工作。