11.3 und 11.4

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