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]].