תכנות פונקציונאלי - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

תכנות פונקציונאלי


Jaman

Recommended Posts

שלום לכולם,

כבר הרבה זמן שחשבתי ללמוד על התחום של Functional Programming, ועכשיו אני מתכוון להתחיל בזה.

ראשית אני צריך עזרה בהחלטה באיזו שפה לבחור (Common Lisp / Scheme / Haskell / Clojure / משהו אחר).

אשמח אם מישהו יסביר במילה או שתיים על ההבדלים המהותיים בין השפות השונות הללו,

ואשמח אם ימליץ על אחת שלדעתו הכי כדאי להתחיל בה. יש להתחשב בזה שיש לי נסיון בעיקר ב C/C++ ופייתון, ויש לי כבר נסיון ב imperative programming וב OOP (אולי זה דווקא יהיה לרעתי בלמידה בהתחלה?).

שנית אשמח אם תפנו אותי למקורות מידע (ספרים, אתרי , בלוגים..) איכותיים שמהם אוכל ללמוד, בהעדפה שיהיו מיועדים לאנשים עם הבנה טובה בתכנות ולא כאלה שמלמדים מאפס.

בנוסף אקבל בשמחה כל טיפים ועצות שיש לכם בנושא :).

קישור לתוכן
שתף באתרים אחרים

דיסקליימר: אני לא מומחה.

אני למדתי תכנות פונקציונלי בטכניון וכן מספר (לא זוכר את שמו) בשפת ML. לא זוכר כלום מהשפה, אבל למרבה ההפתעה כן זוכר הרבה מהעקרונות.

ב-OCAML משתמשים פה ושם בתעשיה ובאקדמיה - אבל זה נדיר. מישהו חכם שאני מכיר שיצא לו לעבוד עם מערכת גדולה כזו קרא לשפה "אסון", אז עדיף שלא תתחיל עם זה.

ל-haskell יש strong typing אבל יחד עם type inference מצויין מקבלים את הרובוסטיות והביצועים של static typing ללא (רוב) הכאב.

יש לה lazy evaluation, שזה מעניין כשלעצמו. הסינטקס קצת כואב אבל לא באמת נורא. למי שמסתדר עם C++ לא תהיה בעיה, והסינטקס שמיש מאוד. תעשיה משתמשים ב-haskell במספר מצומצם של מקומות, אבל זה לא שיקול. יש מספר tutorials מצויינים לשפה, אבל אני לא יודע אם הם מלמדים תכנות פונקצונלי.

LISP ידועה, ואם תלמד אותה אתה תגלה הרבה יותר מתכנות פונקציונלי - היא תומכת בעוד פרדיגמות. יש מספר ספרים כמו structure and interpretation of computer programs (על scheme) או the little lisper.

החיסרון הוא הסוגריים )))))))))))

))))

כנראה כדאי ללמוד על מנת להרחיב את האופקים.

פייתון מאפשרת כמה חלקים של תכנות פונקציונלי שאני באופן אישי מוצא מועיל בחיי היום יום. אבל זו לא השפה ללמוד תכנות פוקנציונלית.

אני ממליץ בחום ללמוד תכנות פונקציונלי - זה ירחיב את אופקיך ותלמד לחשוב בדרכים חדשות. למרבה ההפתעה גם יצא לי להשתמש בזה פה ושם. אבל גם אם לא - הלימוד מוסיף עוד מימד שלם למה זה תוכנה, מה זה חישוב, ומה זה תכנות.

תמצא ספר טוב על תכנות פונקציונלי ותלמד את השפה שהספר משתמש בה.

קישור לתוכן
שתף באתרים אחרים

אוקי, תודה על התשובות :)

נראה לי שאלמד דרך Haskell, כי קראתי שקשה "לאנוס" אותה ולתכנת דרכה בצורה אימפרטיבית, וכי נראה שהיא די מקובלת ויש ספרים שעוסקים בה.

נראה שיש פשוט כל כך הרבה שפות ווראציות שונות לשפות, כשלכל אחת יש יתרונות וחסרונות, ודברים טיפה שונים להציע, שפשוט בא לי להכיר את כולן ;D

אגב, יש לך משהו להגיד על F#?

קישור לתוכן
שתף באתרים אחרים

ההיכרות שלי עם העולם הזה די קטנה.

הדבר היחיד שאני יודע על F# זה שמייקרוסופט החליטה להכניס תמיכה מלאה בשפה בתוך visual studio 2010, אז לפחות יש IDE מצויין.

אם אני זוכר נכון, HASKELL דווקא ידועה בתמיכה מצויינת בתכנות אימפרטיבי, ע"י שימוש בקונספט של monads וקצת syntactic sugar.

קישור לתוכן
שתף באתרים אחרים

לפי מה שהבנתי בנתיים בהסקל פונקיוציות הן pure functional בברירת מחדל, ומשתמשים בmonads בשביל דברים כמו I/O (קבצים וכד').

שאלה אחרונה - באיזה שפה כתוב הקוד בחתימה שלך? P:

קישור לתוכן
שתף באתרים אחרים

בשפות פונקציונליות בד"כ הכל הוא פוקנציונלי בברירת מחדל - זה הרעיון!

לפי מה שאומרים, אחד ההצלחות של הסקל עם שיטת המונאדים זה ש-side effects משתלבים כ"כ טוב יחד עם התוכנה הפונקציונלית.

החתימה שלי כתובה ב-Haskell :) שריד לימים שביליתי עם ה-tutorial.

וזה אכן quicksort אמיתי - גרסה פשוטה אך נכונה (מבחינת סיבוכיות ממוצעת ו-worst case).

קישור לתוכן
שתף באתרים אחרים

מגניב :)

אני אגב התחלתי ללמוד דרך Real World Haskell, ובנתיים אני מתרשם מהספר הזה ממש ממש לטובה!

הכותבים שלו אפשרו Feed-back מקוראים עבור כל פסקה במהלך הכתיבה, ורואים שהניסוחים מתחשבים ב feed back הזה.

הלוואי שכל הספרות המקצועית הייתה נכתבת כמו הספר הזה..

*side note: יואוו, העורך WYSIWYG החדש של הפורום ממש נוח!

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...