2016-07-04 8 views
0

文字列がlispを使って別の文字列に存在するかどうかをチェックしようとしています。lispで文字列を比較する

(string<= "walk" "wall") 

、得られます:私は、次のことを試してみました「3」

を私がする必要がどのような左側にある文字列全体が(^歩く)右辺にあるかどうかを確認することです(いないサブストリング)、それは偽として与える必要があり、前の例のために:

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

それが真または「4」であるべきです。

助けてください。 SBCLのCommon Lispに予め

+1

Googleにリスプの検索機能をお勧めします。 –

答えて

3

を行うことができ最初の試合終了を望んでいた場合は、文字列の接頭辞を探しています。そのためのCommon Lispイディオムは(string= pattern haystack :end2 (length pattern))です。

6

おかげ

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

したがって0は、最初の一致のインデックスを示しています。あなたがあなたのコメントに基づいて

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

ありがとうございました。私はそれが一致するようにしたくない場合(検索 "散歩" "ハイキング")? –

+0

@MahmoudGZAWIそれはマッチングを止めることはできませんが、マッチインデックスが= 0かどうかだけを確認できます。 – jarmond

+1

最初に一致させたいだけなら、 'STRING = S1 S2:END2(LENGTH S1))'を使う方が効率的です。なぜなら、 'SEARCH 'が文字列全体を検索するからです。 – jkiiski