2016-04-17 3 views
7

मैं अल्फा चार या रिक्त स्थान की जांच करने के लिए LISP में स्ट्रिंग के माध्यम से लूप करने के लिए देख रहा हूं। "कॉफी इज मित्र" जैसी एक वाक्य कुछ है जो मैं वैध के रूप में जांचना चाहता हूं। लेकिन जब मैं करना (प्रत्येक # 'अल्फा-चार-पी "कॉफी सबसे अच्छा है"') यह रिक्त स्थान पर विफल रहता है क्योंकि अंतरिक्ष तकनीकी रूप से अल्फा चार नहीं है। सुझाव?अल्फा वर्णों के लिए लिप में एक स्ट्रिंग के माध्यम से लूप या स्पेस

धन्यवाद!

उत्तर

8

सीधे शब्दों में अल्फा-चार या अंतरिक्ष के लिए परीक्षण:

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

every एक समारोह है कि अनुक्रम दूसरा पैरामीटर के प्रत्येक तत्व पर गैर शून्य लौटना चाहिए पहले पैरामीटर के रूप लेता है।

8

LOOP का उपयोग करना:

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- जैसे स्ट्रिंग, या एक पार्स-वृक्ष है। उदाहरण के लिए, बुला (ppcre:parse-string "^[ a-zA-Z]*$") देता है: आप, नियमित अभिव्यक्ति गठबंधन करने के लिए है जब क्योंकि यह श्रृंखलाबद्ध और तार से बचने की तुलना में बहुत आसान है

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

ऊपर दिए गए फ़ॉर्म इसके उपयोग हैं।

संबंधित मुद्दे