Grundlagen der funktionsorientierten Programmierung mit SCHEME/Palindrom-Sätze
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SchemeJS</language>
<code id="5bbb7ae5676c7" hidden>
(define string-first
(lambda (zk)
(substring zk 0 1)))
(define string-last
(lambda (zk)
(let ([n (string-length zk)])
(substring zk (- n 1) n))))
(define string-left
(lambda (zk n)
(substring zk 0 n)))
(define string-right
(lambda (zk n)
(let ([m (string-length zk)])
(substring zk (- m n) m))))
(define string-car
(lambda (zk)
(string-ref zk 0)))
(define string-cdr
(lambda (zk)
(substring zk 1 (string-length zk))))
(define string-cons
(lambda (z zk)
(string-append (string z) zk)))
(define char-pos
(lambda (z zk)
(if (equal? (string z) (string-first zk))
1
(+ 1 (char-pos z (string-cdr zk))))))
(define char-in-string?
(lambda (z zk)
(cond
[(= (string-length zk) 0) #f]
[(equal? (string z) (string-first zk)) #t]
[else
(char-in-string? z (string-cdr zk))])))
</code>
Eine [http://www.wort-suchen.de/wortlisten/palindrom-saetze Recherche im Internet] führt uns schnell zu ganzen Sätzen, die vor- und rückwärts gelesen gleich lauten, auch wenn deren Sinn oft fragwürdig ist. Wir wollen derartige Sätze als Palindrom-Sätze bezeichnen.<br />
Hier einige Beispiele:
Nie solo sein!
Regal mit Sirup pur ist im Lager!
Eine güldne, gute Tugend: Lüge nie!
O Genie, der Herr ehre dein Ego!
Nie leg Raps neben Spargel ein!
Eine Horde bedrohe nie!
Vitaler Nebel mit Sinn ist im Leben relativ.
Entwickeln Sie ein Prädikat, das nur dann <tt>#t</tt> zurückgibt, wenn ein Palindrom-Satz übergeben wird.<br />
Dabei soll nicht zwischen Groß- und Kleinschreibung unterschieden werden. Für den Palindrom-Test sind nur Buchstaben und Umlaute relevant. Alle weiteren Zeichen, wie Ziffern, Satz-, Leer- und Sonderzeichen, bleiben unberücksichtigt.
'''Hinweis:''' Auch hier stehen die Sprachelemente <tt>string-car</tt>, <tt>string-cdr</tt> und <tt>string-cons</tt> zur Verfügung.
<code id="5bbb7171b25c7">
(define palindrom-satz?
(lambda (zk)
...))
</code>
<check>
(and (palindrom-satz? "Rentner")
(palindrom-satz? "O Genie, der Herr ehre dein Ego!")
(palindrom-satz? "Eine güldne, gute Tugend: Lüge nie!")
(not (palindrom-satz? "Das ist kein Palindrom-Satz!")))
</check>
<run id="5bbb7171b2655">
(palindrom-satz? "Nie leg Raps neben Spargel ein!")
</run>
Zurück zu [[Grundlagen der funktionsorientierten Programmierung mit SCHEME/Komplexe Anwendungen: Von musizierenden Chinesen und Schüttelwörtern|musizierenden Chinesen und Schüttelwörtern]].