Grundlagen der funktionsorientierten Programmierung mit SCHEME/Superminimum

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Scheme</language>
Eine endständig rekursive  Minimumsuche haben wir bei den [[Grundlagen der funktionsorientierten Programmierung mit SCHEME/Komplexe Anwendungen: Numerische Listen#Kleinstes Listenelement|komplexen Anwendungen zu (unverschachtelten) numerischen Listen]] implementiert:

<code id="50c91a91b1878">
(define minimum1
  (lambda (ls)
    (cond
      [(null? (cdr ls)) (car ls)]
      [(< (car ls) (cadr ls)) (minimum1 (cons (car ls) (cddr ls)))]
      [else
       (minimum1 (cdr ls))])))
</code>

<run id="50c91a91b1b62">
(minimum1 '(22 35 45 13 8 7 8 6 14 12 47))
</run>

Dieser Algorithmus lässt sich mit Mehrfachrekursionen auf verschachtelte numerische Listen anwenden:

<code id="50c91a91b199a">
(define superminimum1
  (lambda (ls)
    ...))
</code>

<check>
(and (= (superminimum1 '(22 35 (45 13 (8 (7 8) (6) 14) 12 47))) 6)
     (= (superminimum1 '(22 35 45 13 8 7 8 6 14 12 47)) 6)
     (= (superminimum1 '(22)) 22))
</check>

<run id="50c91a91b1bc9">
(superminimum1 '(22 35 (45 13 (8 (7 8) (6) 14) 12 47)))
</run>

Die Prozedur <tt>minimum2</tt> stellt eine weitere Implementation der Minimumsuche in unverschachtelten numerischen Listen dar. Sie demonstriert die Leistungsstärke echtrekursiver Problemlösungen:

<code id="50c91a91b1a10">
(define minimum2
  (lambda (ls)
    (cond
      [(null? (cdr ls)) (car ls)]
      [else
       (let ([min (minimum2 (cdr ls))])
         (if (< (car ls) min)
             (car ls)
             min))])))
</code>

<run id="50c91a91b1c33">
(minimum2 '(22 35 45 13 8 7 8 6 14 12 47))
</run>

Auf dieser Basis lässt sich das "Superminimum" noch einfacher und eleganter realisieren:

<code id="50c91a91b1a77">
(define superminimum2
  (lambda (ls)
    ...))
</code>  

<check>
(and (= (superminimum2 '(22 35 (45 13 (8 (7 8) (6) 14) 12 47))) 6)
     (= (superminimum2 '(22 35 45 13 8 7 8 6 14 12 47)) 6)
     (= (superminimum2 '(22)) 22))
</check>

<run id="50c91a91b1cd0">
(superminimum2 '(22 35 (45 13 (8 (7 8) (6) 14) 12 47)))
</run>

Zurück zu [[Grundlagen der funktionsorientierten Programmierung mit SCHEME/Mehrfachrekursionen|Mehrfachrekursionen]].