2017-10-27 4 views
0
(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) 

Ich versuche, eine Liste der Koordinaten einer Polygonkante zu erstellen. p1, p2 sind einige Punkte wie (0 0). Das Endergebnis sollte ((p1 p2) (p2 p3) (p3 p4) (p4 p5) (p5 p6) (p6 p1)) sein. Ich habe so viel Zeit damit verschwendet, um herauszufinden, was mir einen Fehler gibt. Und warum gibt es einen Fehler. Was mache ich hier falsch?Schemaplan-Manipulationsfehler

+1

Sie könnten damit beginnen, zu identifizieren, auf welchen Fehler Sie sich beziehen. –

Antwort

1

Dies war eine lustige Fingerübung in meiner Mittagspause.

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)) 

Meine rotate Funktion tut, was ich denke, Sie mit Ihrem newlist Funktion vorhatten. In create-polygon habe ich die map höherwertige Funktion verwendet, um das zu tun, was Sie mit Rekursion getan haben.