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!
 Nie leg Raps neben Spargel ein!
 Ein Neger mit Gazelle zagt im Regen 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 vorliegt.<br />
Dabei soll nicht zwischen Groß- und Kleinschreibung unterschieden werden. Für den Palindrom-Test sind nur Buchstaben und Umlaute relevant. Alle weitere 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? "Ein Neger mit Gazelle zagt im Regen nie!")
     (palindrom-satz? "Eine güldne, gute Tugend: Lüge nie!")
     (not (palindrom-satz? "Das ist kein Palindrom-Satz!")))
</check>

<run id="5bbb7171b2655">
(palindrom-satz? "Ein Neger mit Gazelle zagt im Regen nie!")
</run>

Zurück zu [[Grundlagen der funktionsorientierten Programmierung mit SCHEME/Komplexe Anwendungen: Von musizierenden Chinesen und Schüttelwörtern|komplexen Anwendungen: Von musizierenden Chinesen und Schüttelwörtern]].