2016-07-04 11 views
0

Ich versuche zu prüfen, ob eine Zeichenfolge in einer anderen Zeichenfolge mit Lisp existiert. Ich habe versucht, die folgenden:Vergleichen Strings in Lisp

(string<= "walk" "wall") 

und es gibt: „3“

Was ich tun müssen, um zu überprüfen, ob die ganze Reihe in der linken Seite (^ zu Fuß) in der rechten Seite ist (nicht der Teil), so dass für das vorherige Beispiel sollte es falsch geben und mit:

(string<= "walk" "walk on") 

sollte es wahr sein oder „4“.

Jede Hilfe bitte.

Vielen Dank im Voraus

+1

Möglicherweise möchten Sie Google für die Lisp-Suchfunktion –

Antwort

3

Basierend auf Ihren Kommentaren, suchen Sie nach einem String-Präfix. Das Common Lisp-Idiom dafür ist (string= pattern haystack :end2 (length pattern)).

6

In SBCL Common Lisp

(search "walk" "wall") -> NIL 
(search "walk" "walk on") -> 0 

zeigt somit 0 den Index des ersten Spiels. Wenn Sie das Ende des ersten Spiels wollten, könnten Sie tun

(let ((pat "walk")) 
    (+ (length pat) (search pat "walk on"))) -> 4 
+0

Vielen Dank. Was ist, wenn ich nicht möchte, dass es übereinstimmt (suche "walk" "hi walk on")? –

+0

@MahmoudGZAWI Sie können nicht aufhören zu entsprechen, aber Sie können nur überprüfen, ob der Match-Index = 0 ist. – jarmond

+1

Wenn Sie nur den Anfang anpassen möchten, wäre es effizienter '(STRING = S1 S2: END2 (LENGTH S1))' zu verwenden, da 'SEARCH' die gesamte Zeichenfolge durchsucht. – jkiiski