این مطلب به تدریج کاملتر میشود پس در آینده دوباره به آن سر بزنید :)
مبتدیهای یک زبان برنامه نویسی مخصوصا اگر قبل از فراگیری زبان جدید یک زبان دیگر را یاد گرفته باشند، کد هایی به زبان جدید اما با روشی نادرست(و با روش زبان قبلی اگر داشته باشند) مینویسند. این کدها معمولا به درستی کار میکنند اما به روش زبان جدید نوشته نشدهاند. یک مثال معروف در زبان پایتون استفاده از range(len(somelist)) برای دسترسی به اعضای یک لیست است.کامن لیسپ نیز بین زبانها برنامه نویسی استثنا نیست.در ادامه برای حل کردن هر مسئله در کامن لیسپ حداقل دو تکه کد یکی روش اشتباه حل کردن مسئله در کامن لیسپ و دیگری روش درست آنرا ارائه میکنم.
دندانهگذاری(indentation)
برای دندانهگذاری(درست نوشتم؟) بهتر است از Emacs به همراه SLIME استفاده کنید. توجه کنید که ایمکس بصورت پیشفرض بر اساس قواعد «ایمکس لیسپ» و نه «کامن لیسپ» دندانهگذاری را انجام میدهد پس حتما از SLIME استفاده کنید. همچنین توجه کنید که ارسال کد با دندانهگذاری نامناسب به جاهایی مانند کانالهای IRC نوعی بیادبی محسوب میشود!
تعریف یک لیست خالی
با اینکه میتوانید از چهار نماد nil،()،'nil و ()' برای تعریف یک لیست خالی استفاده کنید اما تنها آخرین نماد به خواننده کد میگوید که قرار است این متغیر به عنوان یک لیست خالی استفاده شود. مثال:
(let ((some-empty-list '()))
(some-code with-argument)
(some-more-code-without-argument))
افزایش و کاهش یک عدد
روش نادرست
(setf some-variable (+ some-variable some-value))
(setf some-variable (- some-variable some-value))
روش درست
(incf some-variable some-value)
(decf some-variable some-value)
افزایش و کاهش یک واحدی یک عدد
روش نادرست
(incf some-variable 1)
(decf some-variable 1)
روش درست
(incf some-variable)
(decf some-variable)
استفاده از یک واحد کمتر یا بیشتر یک متغیر
منظورم زمانیست که میخواهید از یک واحد بیشتر یا کمتر یک متغیر بدون تغییر دادن آن استفاده کنید.
نکته: نمادهای -1 و +1 نامهای توابعی هستند که اینکار را برای شما انجام میدهند.
روش نادرست
(some-function (+ a 1))
(some-function (- a 1))
روش درست
(some-function (1+ a))
(some-function (1- a))
جمع کردن اعداد از 1 تا n
روش نادرست
(defun dosum (n) (let ((sum 0)) (loop for i from 1 to n do (incf sum i)) sum))
روش درست
(defun dosum (n) (loop for i from 1 to n sum i))
روش درستتر
(defun dosum (n) (/ (* n (1+ n)) 2))