2016-04-17 10 views
7

アルファの文字またはスペースをチェックするためにLISPの文字列をループする方法を探しています。 「Coffee is Friend」のような文章は、「Valid」としてチェックしたいものです。しかし、私は(すべての# 'アルファ - char - pの "コーヒーが最高です")それはスペースが技術的にアルファチャットではないので、スペースで失敗します。提案?アルファ文字またはスペースのためにlispの文字列をループする

ありがとうございます!

答えて

8

単にアルファチャー又は空間に対する試験:

(every 
    (lambda (c) (or (alpha-char-p c) (char= C#\Space))) 
    "coffee is best") 

everyは、最初のパラメータとして配列二番目のパラメータのすべての要素に非ゼロを返さなければならない機能を取ります。 LOOP使用

8

:タスクの複雑さに応じて

CL-USER > (loop for c across "tea is best" 
       always (or (alpha-char-p c) 
          (char= C#\space))) 
T 
4

を、あなたにも、正規表現を使用する場合があります。あなたがCL-PPCREをロードする場合は、あなたが書くことができます。

(ppcre:scan "^[ a-zA-Z]*$" "Coffee is Friend") 

をライブラリに受け入れられる正規表現は、Perlに似た文字列、またはparse-木です。例えば、(ppcre:parse-string "^[ a-zA-Z]*$")を呼び出しています:

(:SEQUENCE 
:START-ANCHOR 
(:GREEDY-REPETITION 0 
        NIL 
        (:CHAR-CLASS #\ 
            (:RANGE #\a #\z) 
            (:RANGE #\A #\Z))) 
:END-ANCHOR) 

あなたは正規表現を結合する必要がある場合、それは文字列を連結し、エスケープよりもはるかに簡単であるため、上記のフォームは、その用途があります。

関連する問題