BuK/IIm10/BuK-Kreativaufgabe10 G2

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Scheme</language>
<code id="4e0073febe720" hidden>
(define add1 (lambda (n)
    (+ n 1)))

(define sub1 (lambda (n)
    (- n 1)))

(define P (lambda (n)
    (if (= n 0)
        0
        (sub1 n))))
</code>

== Aufgabenstellung ==
Entwickeln Sie einen Werkzeugkasten  für primitiv rekursive Funktionen.
Es wird erwartet, dass aus primitiv rekursiven (Basis-)Funktionen unter Verwendung der
Kompositionstechniken (Substitution und primitive Rekursion) neue primitiv rekursive
Funktionen generiert werden. Diese sollen verwendbar sein.
Es wird nicht erwartet, dass ein universelles Beweisprogramm, das für eine gegebene
Funktion konstruktiv nachweist, dass sie primitiv rekursiv ist, entwickelt wird.

== Basisfunktionen ==
Zuerst definieren wir die Basisfunktionen.

<code id="4e0073febe788">
(define S 
  (lambda (n)
    (add1 n)))

(define C0 
  (lambda n 0))

(define U 
  (lambda (i . n)
    (letrec
        ([helper
          (λ (counter args)
            (if (= counter i)
                (car args)
                (helper (+ counter 1) (cdr args))))])
      (helper 1 n))))
</code>

Die Nullfunktion kann mit beliebig vielen Parametern aufgerufen werden.
<run id="4e00745e40e2d">
(C0)
</run>
<run id="4e0076eb7301d">
(C0 1 2 3 4)
</run>

Die Projektionsfunktion erwartet als ersten Parameter den Inde des zu ermittelnden Arguments und anschließend eine variable Anzahl von Argumenten.
<run id="4e0076eb7309e">
(U 1 1 2 3)
</run>
<run id="4e0076eb73122">
(U 3 1 2 3)
</run>