Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
11.3 und 11.4
11.3.
; Prozedur ist selbstgebastelt, nicht die aus der VOrl. verändert...
(define (make-rat z n)
(cond
((null? n) (error "Nenner darf nicht 0 sein!!!"))
((>= (* z n) 0) (cons (abs z) (abs n)))
(else (cons (abs z) (- 0 (abs n))))))
11.4.
[CODE](define (make-line sp ep)
(cons sp ep))
(define (start-point line)
(car line))
(define (end-point line)
(cdr line))
(define (make-point x y)
(cons x y))
(define (x-coord p)
(car p))
(define (y-coord p)
(cdr p))
(define (midpoint line)
(make-point (+ (x-coord (start-point line)) (/ (- (x-coord (end-point line)) (x-coord (start-point line))) 2))
(+ (y-coord (start-point line)) (/ (- (y-coord (end-point line)) (y-coord (start-point line))) 2))))[/CODE]
Zu 11.3: Wahrscheinlich hast du die Funktion zero? gemeint; null? prüft ob es sich um die leere Liste handelt.
Zu 11.4: Du definierst midpoint als
(x1 + (x2-x1)/2), (y1 + (y2-y1)/2).
Warum nicht einfacher:
(x1 + x2)/2, (y1 + y2)/2
D.h.
(define (midpoint line)
(make-point (/ (+ (x-coord (line-start line)) (x-coord (line-end line))) 2)
(/ (+ (y-coord (line-start line)) (y-coord (line-end line))) 2)))