راهنمای خوندن SICP و کار کردن با زبان scheme

بارها توی این انجمن در مورد کتاب SICP صحبت شده، خودم هم تصمیم گرفتم برای شروع کردن یادگیری functional programming به شکل جدی این کتاب رو بخونم، برای همین تصمیم گرفتم این پست رو ایجاد کنم تا منابع و روش اجرای کد‌های کتاب رو باهاتون به اشتراک بزارم.

دانلود یا خوندن آنلاین SICP

نسخه رایگان PDF (قانونی):

نسخه رایگان به صورت HTML :
خوندن آنلاین:
https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book.html
دانلود فایل‌های HTML از این صفحه (قانونی):

Video Lecture

video lecture های تدریس شده در MIT در سال 1986 توسط نویسنده‌(های) کتاب:

فقط این که دو لینک اول ویرایش دوم کتاب هستش ولی video lecture ها تدریس از روی ویرایش اول کتاب هستش.

کار با Scheme

SICP از scheme استفاده کرده، توی ویدیوها و کتاب هم کدای scheme هستش، برای پیش رفتن باهاش میتونید mit-scheme رو نصب کنید:
https://www.gnu.org/software/mit-scheme
روی ubuntu با همین نام روی ریپازیتوری اصلی هست، کار کردن باهاش چندان دلچسب نیست چون توی REPL مثلا اگه بخواین یه چیزی رو ویرایش کنید امکان بازگشت به عقب ندارین و باید کل چیزی که نوشتین رو پاک کنید تا به جایی برسین که نیاز به ویرایش داره، یه راه حلش اینه که کد رو توی یه فایل بنویسید و توی REPL با دستور زیر اجرا کنیدش:

(load 'filename.scm')

این روش هم مشکلات خودش رو داره مثلا این که اگه فایل رو ادیت کنید دوباره باید load بشه و نمیتونید خیلی راحت کلید بالا رو بزنید که آخرین دستور که همون load کردن بوده رو بیاره، برای همین کل دستور load باید دوباره تایپ بشه.

راه حل پیشنهادی برای کار کردن با Scheme

استفاده از racket:

از این لینک racket رو نصب کنید: https://download.racket-lang.org
هم با اجرای racket توی ترمینال یه REPL خوب دارین و هم یه ادیتور ‌به شکل GUI به اسم DrRacket
با racket میتونید dialact های مختلفی از racket و scheme رو اجرا کنید برای این کار خیلی راحت میتونید ابتدای فایل این دستور رو بزنید:

#lang dialact

دستور بالا فقط زمانی کار می‌کنه که کدها رو توی یک فایل بنویسید و اجرا کنید، در صورتی که توی REPL وارد کنید با ارور مواجه میشین، برای این‌که REPL زبان Racket رو برای dialact خاصی اجرا کنید با استفاده از -I مشخص کنید که از چه dialact ای میخواین استفاده کنید.

racket -I dialact

توی این پاسخ در stackoverflow در مورد dialact ها و دستوری که بالا گفتم صحبت شده: https://stackoverflow.com/a/7152632/9690045
و همچنین برای کار کردن روی کتاب SICP توصیه شده از dialact با همین نام استفاده بشه، این dialact رو اول باید با دستور زیر نصب کنید:

raco pkg install sicp

بعدش برای نوشتن کدها داخل فایل این دستور رو در ابتدا قرار بدین:

#lang sicp

برای اجرای REPL زبان Racket با dialact مخصوص sicp این دستور رو در terminal اجرا کنید:

racket -I sicp

اطلاعات بیشتر درمورد dialact مخصوص SICP:
https://docs.racket-lang.org/sicp-manual/index.html

استفاده از سایت repl.it:

توی این سایت ثبت‌نام کنید بعدش می‌تونید REPL زبان scheme داشته باشین:

این REPL داره درواقع از یک Interpreter برای scheme استفاده می‌کنه که به زبان JavaScript نوشته شده:
https://www.biwascheme.org
نسبت به Scheme اصلی محدودیت‌هایی داره که اینجا اونارو توضیح داده:
https://www.biwascheme.org/doc/features.html

4 Likes