All pastes #802059 Raw Edit

Unbenannt

public text v1 · immutable
#802059 ·published 2007-11-29 21:59 UTC
rendered paste body
(require (lib "trace.ss"))

;Aufgabe 1
(define (list? liste)
  (if (and (pair? liste) (not (null? liste))) 
      (list? (cdr liste)) 
      (cond ((eq? liste '()) '#t)
            (else '#f)))
  )
;falls das mit '#t und '#f nicht gerne gesehen wird:
; (define (list? l)
;   (if (and (pair? l) (not (null? l))) (list? (cdr l))
;       (cond ((eq? '() l) (and #t #t))
;             (else (and #f #f)))))
;(list? (cons 1 (cons 2 (cons 3 (cons (cons 4 5) (cons 6 (cons (cons 7 8) (cons 9 '()))))))))
;(list? (cons (cons (cons (cons 1 (cons (cons 2 3) 4)) (cons 5 '())) (cons 6 (cons 7 8))) 9))
;(list? (cons (cons (cons (cons (cons (cons '() 1) 2) 3) 4) 5) (cons 6 (cons (cons 8 7) 9))))
;(list?(cons (cons 1 2) (cons 3 (cons 4 (cons (cons 5 6) (cons 7 (cons (cons 8 9) '())))))))
;(list? (cons 1 (cons (cons (cons 2 (cons 3 (cons (cons 4 5) 6))) (cons (cons 7 8) '())) 9)))
;Aufgabe 2
(define (collatz i)
  (if (even? i) 
      (/ i 2)
      (+ (* i 3) 1))
  )
;(collatz 7);-->22
(define (collatz-length i) 
  (define (laenge i n)
    (if (> i 1)
        (laenge (collatz i) (+ n 1))
        n)
    )
  (laenge i 1)
  )
;(collatz-length 6);-->9
(define (collatz-longest n)
  (define (zaehlen i momlmax momimax)
    (cond ((<= i n) 
           (if (< (collatz-length i) momlmax) (zaehlen (+ i 1) momlmax momimax) (zaehlen (+ i 1) (collatz-length i) i)))
          (else (display "Die längste Collatz-Folge ist ") (display momimax) (display " mit der Länge ") (display momlmax) (newline) (display momlmax)))
    )
  (zaehlen 0 0 0)
  )
;(collatz-longest 10000)
;Aufgabe 3 a
(define (reduce f initial-value list)
  (if (not (null? list)) (reduce f (f (car list) initial-value) (cdr list)) initial-value))
;(reduce + 0 '(4 2 5 7 3 -1 7)) ; --> 27

;(reduce cons '() '(6 2 2)) ; --> (2 2 6)
; Dieser Aufruf entspricht (reverse) weil er die das erste Element der Liste an eine andere (hier: leer) 
; Liste davorhängt und dies solange macht bis keine Elemente mehr vorhanden sind.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Aufgabe 3 b

(define (map f list)
  (reduce cons '() (reduce (lambda (x y) (cons (f x) y)) '() list)))
;(map sqrt '(81 25 4 289 169)) ; --> (9 5 2 17 13)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Aufgabe 3c
(define (partition threshold list)
  (reduce (lambda (x y) (cond ((>= x threshold) (cons (car y) (cons x (cdr y))))
                              (else (cons (cons x (car y)) (cdr y))))) (cons '() '()) list)) ; Alles eine Frage des Aufrufs :D
;(partition 3 '(0 3 5 7 2 1 6 4)) ; --> ((1 2 0) 4 6 7 5 3)