खोज…


अवलोकन

कॉमन लिस्प में पैटर्न से मेल खाने वाले दो मुख्य पुस्तकालय ऑप्टिमा और ट्रिविया हैं । दोनों एक समान मिलान एपीआई और वाक्यविन्यास प्रदान करते हैं। हालाँकि, ट्रिविया एक एकीकृत इंटरफ़ेस प्रदान करता है ताकि मिलान, defpattern का विस्तार किया जा defpattern

क्लैक अनुरोध भेजना

क्योंकि एक क्लैक अनुरोध को एक प्लिस्ट के रूप में दर्शाया जाता है, हम पैटर्न मिलान का उपयोग क्लैक ऐप में प्रवेश बिंदु के रूप में उनके उचित नियंत्रकों के लिए मार्ग अनुरोध के रूप में कर सकते हैं।

(defvar *app*
  (lambda (env)
    (match env
      ((plist :request-method :get
              :request-uri uri)
       (match uri
         ("/" (top-level))
         ((ppcre "/tag/(\\w+)/$" name) (tag-page name)))))))

नोट: *app* शुरू करने के लिए *app* हम इसे क्लैकअप के पास भेजते हैं। ईजे (clack:clackup *app*)

defun मैचों

पैटर्न से मेल खाते हुए एसएमएल के समान फ़ंक्शन की परिभाषा और पैटर्न मिलान को आपस में जोड़ सकते हैं।

(trivia:defun-match fib (index)
  "Return the corresponding term for INDEX."
  (0 1)
  (1 1)
  (index (+ (fib (1- index)) (fib (- index 2)))))

(fib 5)
;; => 8

कंस्ट्रक्टर पैटर्न

विपक्ष-कोशिकाएं, संरचनाएं, वैक्टर, सूचियां और ऐसे का निर्माण कंस्ट्रक्टर पैटर्न के साथ किया जा सकता है।

(loop for i from 1 to 30
      do (format t "~5<~a~;~>"
                 (match (cons (mod i 3)
                              (mod i 5))
                   ((cons 0 0) "Fizzbuzz")
                   ((cons 0 _) "Fizz")
                   ((cons _ 0) "Buzz")
                   (_ i)))
      when (zerop (mod i 5)) do (terpri))
; 1    2    Fizz 4    Buzz 
; Fizz 7    8    Fizz Buzz 
; 11   Fizz 13   14   Fizzbuzz
; 16   17   Fizz 19   Buzz 
; Fizz 22   23   Fizz Buzz 
; 26   Fizz 28   29   Fizzbuzz

गार्ड पैटर्न

गार्ड पैटर्न का उपयोग यह जांचने के लिए किया जा सकता है कि एक मूल्य एक मनमाना परीक्षण-रूप को संतुष्ट करता है।

(dotimes (i 5)
  (format t "~d: ~a~%"
          i (match i
              ((guard x (oddp x)) "Odd!")
              (_ "Even!"))))
; 0: Even!
; 1: Odd!
; 2: Even!
; 3: Odd!
; 4: Even!


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow