در Common Lisp، رشته بردار از کاراکترها است. رشتهها بهصورت کاراکترهایی نوشته میشوند که داخل گیومهی دوتایی قرار میگیرند (مثلاً "Hello World!").
«محمول» stringp تنها در صورتی «درست» را برمیگرداند که مقدار دادهشده یک رشته باشد.
رشتهها را میتوان با تابع subseq به زیررشتهها تقسیم کرد. این تابع رشته، اندیس شروع و بهصورت اختیاری اندیس پایان را میگیرد. اندیسگذاری از صفر شروع میشود.
(subseq "Hello World" 1 5) ; => "ello"
(subseq "skip to the end" 5) ; => "to the end"
رشتهها را میتوان با string= از نظر برابری مقایسه کرد. اگر بزرگی و کوچکی کاراکترها باید نادیده گرفته شود، میتوان از string-equal استفاده کرد.
(string= "macaroni" "macaroni") ; => T
(string= "macaroni" "MACARONI") ; => NIL
(string-equal "macaroni" "MACARONI") ; => T
کارهایی مانند بزرگکردن حروف، کوچککردن حروف و بزرگکردن حرف اول رشتهها را میتوان با string-upcase، string-downcase و string-capitalize انجام داد.
(string-upcase "not too loud") ; => "NOT TOO LOUD"
(string-downcase "YELL IT FROM THE ROOFTOPS") ; => "yell it from the rooftops"
(string-capitalize "practical COMMON LiSP") ; => "Practical Common Lisp"
در این تمرین کدی مینویسید که به Larry the Lisp Alien کمک میکند رشتههای لاگ را تجزیه و قالببندی کند. این رشتههای لاگ از سیستمهای گوناگون میرسند و باید پردازش شوند تا پیامهایشان روی یک نمایشگر پایشِ آموزنده نمایش داده شود.
رشتههای لاگ به این شکلاند: "[<level>]: <message>". سطح یکی از این مقدارها است: info، warn یا ohno.
تابعی به اسم log-message تعریف کنید که یک رشتهی لاگ میگیرد و به پیامی که در آن قرار دارد ارزیابی میشود.
(log-message "[ohno]: whoops!") ; => "whoops!"
سطح رشتهی لاگ، شدت آن را تعیین میکند.
info یعنی شدت :everything-ok
warn یعنی شدت :getting-worried
ohno یعنی شدت :run-for-cover
تابعی به اسم log-severity تعریف کنید که یک رشتهی لاگ میگیرد و به شدت درست ارزیابی میشود.
(log-severity "[warn]: might want to get that checked") ; => :getting-worried
متأسفانه گاهی رشتههای لاگ همیشه درست قالببندی نمیشوند. بهطور مشخص، ممکن است سطح لاگ همانطور که در بالا گفته شد همهاش با حروف کوچک نباشد. log-severity را طوری تغییر دهید که این حالت را هم پوشش دهد.
(log-severity "[WaRn]: string case system failing") ; => :getting-worried
بسته به شدت، پیام باید به شکلهای مختلفی تغییر کند:
:everything-ok باشد، پیام باید به همه حروف کوچک تغییر کند.:getting-worried باشد، پیام باید طوری تغییر کند که حرف اول هر کلمه بزرگ باشد.:run-for-cover باشد، پیام باید به همه حروف بزرگ تغییر کند.تابعی به اسم log-format تعریف کنید که یک پیام لاگ میگیرد و به پیامی با قالببندی درست ارزیابی میشود.
(log-format "[ohno]: whoops!") ; => WHOOPS!
در Exercism ثبتنام کنید تا Common Lisp را همراه با 27 مفهوم92 تمرین و مربیگری انسانی واقعی یاد بگیرید و در آن استاد شوید، همهی اینها رایگان.