2016-11-25 5 views
2

Ich versuche, ein Mitglied zu verwenden? Funktion, um das Vorhandensein einer bestimmten Zeichenfolge in einer Benutzereingabe zu bestimmen.Schlägerschema - Mitglied? Funktion Rätsel

Das Mitglied? Funktion verwendet werden:

(define (member? item seq) 
    (sequence-ormap (lambda (x) 
        (equal? item x)) 
        seq)) 

jedoch die Struktur meines Programms erfordert mich folgenden Vergleich zu tun: (Mitglied ‚(die Namen)‘ (die Namen der basemen))

Ein Beispiel für seine folgende Ausgabe ist:

> (car (car *strong-cues*)) 
'((the names) (their names)) 
> (car (car (car *strong-cues*))) 
'(the names) 
> (member? (car (car (car *strong-cues*))) '(the names of the basemen)) 
#f 

„die Namen“ sind eindeutig in der Eingabe des Benutzers jedoch (die in diesem Fall „die Namen der basemen“ sind), ist die Frage, die ich sehe, dass diese ist was t findet statt:

Sind (die Namen) in 'der oder' Namen oder 'oder' der oder 'Basis?

Gibt es eine Möglichkeit, diesen Vergleich richtig durchzuführen, so dass die Suche nach "die Namen" wahr zurückgeben würde, wenn "die Namen" eine Zeichenfolge innerhalb der Benutzereingabe wäre?

Antwort

3

Dies ist nicht wirklich member überhaupt, da Sie nach einer Unterliste in einer Liste suchen. Aus diesem Grund können Sie ormap nicht verwenden, da jede Iteration nur ein Element enthält, während Sie erwarten, mehrere zu vergleichen. Ich schlage vor, Sie prefix? machen:

(define (prefix? what lst) 
    ; implementation left as exercise 
    <???>) 

(prefix? '(b c) '(a b c d)) ; ==> #f 
(prefix? '(b c) '(b c d)) ; ==> #t 

Dies ist eine ziemlich einfache rekursive Sache, wo Sie Element zu Element vergleichen, bis die Suchliste leer ist. Wenn entweder jeder Elemententest falsch ist oder der Heuhaufen leer ist, ist er falsch. Dann können Sie leicht find-sublist mit ihm machen:

(define (find-sublist sub lst) 
    (cond ((null? lst) #f) 
     ((prefix? sub lst) lst) 
     (else (find-sublist sub (cdr lst)))))) 

(find-sublist '(c d) '(a b c d e f)) ; ==> (c d e f) 

Hier kehre ich die Liste, die das Präfix hat, wie Mitglied der Fall ist, aber das leicht geändert werden kann, was auch immer Sie es .. index tun möchte, #t, usw.

+0

Ihre Erklärung ist kurz und informativ. Vielen Dank!! –