Laborarbeit №2. Rekursion, Verfahren höherer Ordnung, Listenverarbeitung
Ziel der Arbeit
Erwerb von Kenntnissen im Umgang mit den Grundlagen der Programmierung in der Sprache Scheme: Verwendung von Rekursion, Verfahren höherer Ordnung, Listen.
Aufgaben
Verwenden Sie beim Ausführen der Aufgaben keine -Zuweisungen, Schleifen und Verweise auf Sequenzelemente über den Index. Vermeiden Sie die Rückgabe boolescher Werte aus bedingten Konstrukten. Demonstrieren Sie die Leistung der Verfahren anhand von Beispielen.
-
Implementieren Sie die Prozedur
(Anzahl x xs)
, um zu zählen, wie oft das Elementx
in der Listexs
vorkommt. Beispiele für die Anwendung des Verfahrens:(count 'a '(a b c a)) ⇒ 2 (count 'b '(a c d)) ⇒ 0 (count 'a'()) ⇒ 0
-
Implementieren Sie die Prozedur
(delete pred? xs)
, die alle Elemente aus der Listexs
„löscht“, die das Prädikatpred erfüllen?
.Beispiele für die Anwendung des Verfahrens:
(gerade löschen? '(0 1 2 3)) ⇒ (1 3) (gerade löschen? '(0 2 4 6)) ⇒ () (gerade löschen? '(1 3 5 7)) ⇒ (1 3 5 7) (Auch löschen? '()) ⇒ ()
-
Implementieren Sie eine Prozedur
(iterate f x n)
, die eine Liste vonn
Elementen der Form(x, f(x), f(f(x)), f(f(f(x))) zurückgibt, ...)
, wobeif
eine Prozedur (Funktion) eines Arguments ist. Beispiele für die Anwendung des Verfahrens:(iterieren (Lambda (x) (* 2 x)) 1 6) ⇒ (1 2 4 8 16 32) (iterieren (Lambda (x) (* 2 x)) 1 1) ⇒ (1) (iterate (lambda (x) (* 2 x)) 1 0) ⇒ ()
-
Implementieren Sie die Prozedur
(intersperse e xs)
, die eine Liste zurückgibt, die durch Einfügen des Elementse
zwischen den Elementen der Listexs
erhalten wird. Beispiele für die Anwendung des Verfahrens:(Einstreuung 'x'(1 2 3 4)) ⇒ (1 x 2 x 3 x 4) (einstreuen 'x'(1 2)) ⇒ (1 x 2) (einstreuen 'x'(1)) ⇒ (1) (einstreuen 'x'()) ⇒ ()
-
Implementieren Sie die Prädikate
(any? pred? xs)
, die 9 zurückgeben0015 #t wenn mindestens eines der Elemente der Listexs
das Prädikatpred erfüllt?
und(all? pred? xs)
, was#t
zurückgibt, wenn alle Elemente der Listexs
das Prädikatpred erfüllen?
.Verwenden Sie keine -Bedingungskonstrukte, sondern verwenden Sie stattdessen die Funktionen der integrierten Funktionen
und
sowieoder
. Anwendungsbeispiele:(beliebig? ungerade? '(1 3 5 7)) ⇒ #t (beliebig? ungerade? '(0 1 2 3)) ⇒ #t (beliebig? ungerade? '(0 2 4 6)) ⇒ #f (irgendein? ungerade? '()) ⇒ #f (alle? ungerade? '(1 3 5 7)) ⇒ #t (alle? ungerade? '(0 1 2 3)) ⇒ #f (alle? ungerade? '(0 2 4 6)) ⇒ #f (alle? ungerade? '()) ⇒ #t ; Es ist eine Funktion, implementieren Sie sie
-
Implementieren Sie die Zusammensetzung von Funktionen (Prozeduren) eines Arguments, für die Sie eine Prozedur
oder
schreiben, die eine beliebige Anzahl von Prozeduren eines Arguments annimmt und eine Prozedur zurückgibt, die eine Zusammensetzung dieser Prozeduren ist. Beispiele für die Anwendung des Verfahrens:(definieren (f x) (+ x 2)) (definiere (g x) (* x 3)) (definiere (h x) (- x)) ((o f g h) 1) ⇒ -1 ((o f g) 1) ⇒ 5 ((o h) 1) ⇒ -1 ((o) 1) ⇒ 1
|