Practice session 3.  תחביר ממשי ( קונקרטי ) ותחביר מופשט ( אבסטרקטי )  שיטות חישוב : Applicative & Normal Evaluation.

Slides:



Advertisements
Similar presentations
1 Programming Languages (CS 550) Lecture Summary Functional Programming and Operational Semantics for Scheme Jeremy R. Johnson.
Advertisements

1-1 An Introduction to Scheme March Introduction A mid-1970s dialect of LISP, designed to be a cleaner, more modern, and simpler version than.
Metacircular Evaluation SICP Chapter 4 Mark Boady.
Evaluators for Functional Programming Chapter 4 1 Chapter 4 - Evaluators for Functional Programming.
מבוא מורחב למדעי המחשב בשפת Scheme תרגול 10. Environment Model 3.2, pages
טבלאות סמלים נכתב ע"י אלכס קוגן סמסטר חורף, תשס"ח.
לומדה לשימוש ב Google Scholar en&tab=ws.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
(define applicative-eval (lambda (exp) (cond ((atomic? exp) (eval-atomic exp)) ((special-form? exp) (eval-special-form exp)) ((list-form? exp) (eval-list.
משטר דינמי המשך – © Dima Elenbogen :55 חידה שכדאי לעבור עליה: 2011/ho/WCFiles/%D7%97%D7%99%D7%93%D7%94%20%D7%A2%D7%9D%20%D7%91%D7%95%D7%A0%D7%95%D7%A1.doc.
חורף - תשס " ג DBMS, צורות נורמליות 1 צורה נורמלית שלישית - 3NF הגדרה : תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב -3NF.
Functional programming: LISP Originally developed for symbolic computing Main motivation: include recursion (see McCarthy biographical excerpt on web site).
מבוא למדעי המחשב תרגול 4 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא למדעי המחשב © אריק פרידמן 1 מצביעים כמערכים דוגמה.
עיבוד תמונות ואותות במחשב אלכסנדר ברנגולץ דואר אלקטרוני : שיטות קידוד שיטות קידוד אורך מלת קוד ואנטרופיה אורך מלת קוד ואנטרופיה קידוד.
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
Questions are the Answer Penick&all H ISTORY R ELATIOINSHIPS A PPLICATION S PECULATION E XPLANATION.
Backpatching 1. תזכורת מתרגול קודם קוד ביניים - שפת הרביעיות שיטות לייצור קוד ביניים –שימוש בתכונת code –כתיבה ישירה ל-buffer של פקודות שיטות לתרגום מבני.
ערכים עצמיים בשיטות נומריות. משוואה אופינית X מציין וקטור עצמי מציינת ערך עצמי תואם לוקטור.
קורס תכנות – סימסטר ב ' תשס " ח שיעור שישי: מערכים
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
Functional programming: LISP Originally developed for symbolic computing First interactive, interpreted language Dynamic typing: values have types, variables.
עקרון ההכלה וההדחה.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
SchemeCOP Introduction to Scheme. SchemeCOP Scheme Meta-language for coding interpreters –“ clean ” semantics Scheme = LISP + ALGOL –simple.
מתמטיקה בדידה תרגול 2.
A. Frank File Organization Hardware Size Parameters.
Structure. מה לומדים היום ? דרך לבנות מבנה נתונים בסיסי – Structure מייצר " טיפוס " חדש מתאים כאשר רוצים לאגד כמה משתנים יחד דוגמאות : עובד : שם, טלפון,
PPL Syntax & Formal Semantics Lecture Notes: Chapter 2.
PPL Syntax & Formal Semantics Lecture Notes: Chapter 2.
PPL Static Verification: Type Inference Lecture Notes: Chapter 2.
מבוא מורחב 1 Your turn (Review) What does a lambda expression return when it is evaluated? the value of a lambda expression is a procedure What three things.
1 Subt. model interpreter: Structure of the interpreter ASP Derived expressions Core Test Data structures Utils A racket lib Proc / Primitive-Proc. Global.
Sense (Gene) Anti-sense Anti- sense.
Practice session 3 תחביר ממשי ( קונקרטי ) ותחביר מופשט ( אבסטרקטי ) שיטות חישוב : Applicative & Normal Evaluation Partial Evaluation.
THE GAINS AND THE PITFALLS OF REIFICATION - THE CASE OF ALGEBRA ANNA SFARD AND LIORA LINCHEVSKI.
The environment-based operational semantics Chapter
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
 Client, Supplier ומה שביניהם ( ADT!).  שאלה 1: יצירת ADT עבור מעגל במישור נניח שלקוח מעוניין בפעולות הבאות : הזזת מעגל וחישוב שטח מעגל. הספק יספק ללקוח.
PPL Lecture 3 Slides by Yaron Gonen, based on slides by Daniel Deutch and lecture notes by Prof. Mira Balaban.
PPL Lecture 3 Slides by Yaron Gonen, based on slides by Daniel Deutch and lecture notes by Prof. Mira Balaban.
1 Subt. model interpreter: Introduction Abstract Syntax Parser Abstract Syntax Parser Derived Expressions Core Test Data Structures Utils (a racket lib)
2003B Q5 Suppliers(sid, sname, city) Select sid from suppliers where city=‘jerusalem’ or sname like ‘%Smith’ Select sid from suppliers where city=‘jerusalem’
מבוא למדעי המחשב לתעשייה וניהול הרצאה 6. מפעל השעווה – לולאות  עד עכשיו  טיפלנו בייצור נרות מסוג אחד, במחיר אחיד  למדנו להתמודד עם טיפול במקרים שונים.
PPL Syntax & Formal Semantics Lecture Notes: Chapter 2.
Operational Semantics of Scheme
PPL Lecture 3 Slides by Yaron Gonen,
6.001 SICP Object Oriented Programming
Introduction to Scheme
Formal Specifications for Complex Systems (236368) Tutorial #1
September 4, 1997 Programming Languages (CS 550) Lecture 6 Summary Operational Semantics of Scheme using Substitution Jeremy R. Johnson TexPoint fonts.
מחלקות classes.
Env. Model Implementation
SQL בסיסי – הגדרה אינדוקטיבית
The Metacircular Evaluator
מבוא למדעי המחשב – סמסטר א' תשע"ד
מבוא לתכנות מונחה עצמים Object Oriented Programming
תוכנה 1 תרגול 13 – סיכום.
מחסנית ותור Stacks and Queues.
Dynamic Scoping Lazy Evaluation
The Metacircular Evaluator
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
3.4 Local Binding Recall Scheme's let: > (let ((x 5)‏ (y 6))
Lecture 26: The Metacircular Evaluator Eval Apply
Chapter 1 Review: BNF Grammar for lists:
Streams, Delayed Evaluation and a Normal Order Interpreter
6.001 SICP Variations on a Scheme
Lecture 25: The Metacircular Evaluator Eval Apply
Presentation transcript:

Practice session 3

 תחביר ממשי ( קונקרטי ) ותחביר מופשט ( אבסטרקטי )  שיטות חישוב : Applicative & Normal Evaluation

: Kinds:, : Kinds:, : Kinds:,, : Kinds:, : Kinds: numbers. : Kinds: #t, #f : Kinds: Restricted sequences of letters, digits, punctuation marks : Kinds:,,,, : Components: Variable: Expression: : Components: Parameter:. Amount: >= 0. Ordered. Body:. Amount: >= 1. Ordered. : Components: Quoted-name: : Components: Predicate: Consequence: Alternative: : Components: Var:. Amount: >= 0. Body:. Amount: >= 1. Ordered. And more…

-> | ’(’ ’)’ -> | | -> | -> Numbers -> ’#t’ | ’#f’ -> Restricted sequences of letters, digits, punctuation marks -> | | | | -> + -> ’define’ -> ’lambda’ ’(’ * ’)’ + -> ’quote’ -> ’cond’ * -> ’(’ + ’)’ -> ’(’ ’else’ + ’)’ -> ’if’ -> ’let’ ’(’ * ’)’ +

 שאלה 1: נרצה להוסיף לשפה ביטוי הדומה ל -if, אבל בלי האלטרנטיבה, שייראה כך : (when pred-exp cons-exps)  דוגמאות : ((when (> x 5) (+ x 3) (when (> x 5) (display x) (* x x))  אילו שינויים צריך לעשות בתחביר ?

: Kinds:, : Kinds:, : Kinds:, : Kinds:,,,, : Components: Predicate: Consequence-exps: Amount: >=1. Ordered,

-> | ’(’ ’)’ -> | -> | | | | -> ’if’ -> ‘when’ + |

 שאלה 2: ראינו שהתחביר הממשי תומך בהגדרת משתנה באופן הבא : -> ‘define’  איך ישתנה התחביר אם נרצה להוסיף אפשרות להגדיר משתנה כך : (x := 3) ?  תשובה : התחביר הממשי ישתנה כך : -> ‘define’ | ‘:=‘ רק !

שתי פונקציות להערכת ביטויים ב -Scheme:  applicative-eval(e) eval-substitute-reduce  normal-eval(e) substitute-reduce

 שאלה 4: לכל Binding instance ציינו את תחום ההגדרה (Scope) שלו ואת המופעים הקשורים (Bound instance) אליו. כמו כן, ציינו מופעים חופשיים של משתנים : 1(define even? (lambda (n) 2(eq? (/ n 2) 0))) 3(define expt? (lambda (n) 4 (cond ((= n 1) #t) 5((even? n) (expt? (/ n 2))) 6 (else #f))))

 שאלה 5: התבוננו בקטע הקוד הבא. למה צריך לבצע renaming? >(define z not) >(((lambda (x) (lambda (z) (x z))) (lambda (w) (z w))) #f)

 שאלה 5: >(define z not) >(((lambda (x) (lambda (z1) (x z1))) (lambda (w) (z w))) #f)

 שאלה 6: applicative-eval [ ((lambda (x z) (* (+ x z) z)) 1 (+ 1 2) ) ] applicative-eval [ (lambda (x z) (* (+ x z) z)) ] ==> applicative-eval [1] ==> 1 applicative-eval [(+ 1 2)] applicative-eval [+] ==> # applicative-eval [1] ==> 1 applicative-eval [2] ==> 2 ==>3

(* (+ x z) z) {x = 1} ==> (* (+ 1 z) z) (* (+ 1 z) z) {z = 3} ==> (* (+ 1 3) 3) reduce: applicative-eval [(* (+ 1 3) 3)] applicative-eval [*] ==> # applicative-eval [(+ 1 3)] applicative-eval [+] ==> # applicative-eval [1] ==> 1 applicative-eval [3] ==> 3 ==> 4 applicative-eval [3]==> 3 ==> 12

 שאלה 8: >(define test (lambda (x y) (if (= x 0) 0 y))) >(define zero-div (lambda (n) (/ n 0))) ;division by zero!  מהן תוצאות החישוב : (test 0 (zero-div 5)) בשני האלגוריתמים?

>(define test (lambda (x y) (if (= x 0) 0 y))) >(define zero-div (lambda (n) (/ n 0))) ;division by zero! >(test 0 (zero-div 5)) normal-eval [ (test 0 (zero-div 5)) ] normal-eval [test]==> (if (= x 0) 0 y)) {x = 0}==> (if (= 0 0) 0 y)) (if (= 0 0) 0 y)) {y = (zero-div 5)}==> (if (= 0 0) 0 (zero-div 5) )) reduce: normal-eval[(if (= 0 0) 0 (zero-div 5)))] normal-eval[(= 0 0)] normal-eval[ = ] ==># normal-eval[ 0 ] ==>0 ==> #t normal-eval[0] ==> 0 ==>0 מה היה קורה אם היינו מחשבים לפי applicative-eval??

 שאלה 7: התבוננו בקטע הקוד הבא : >(define loop (lambda (x) (loop x))) >(define g (lambda (x) 5))  מה יקרה לאחר הפעלת השורה הבאה לפי כל אחת משיטות החישוב ? >(g (loop 0))

 שאלה 9: איך אפשר לדעת לפי איזו שיטה עובר האינטרפרטר ? >(define f (lambda(x) 1) >(define g (lambda (x) 2)  אם אין side-effects נקבל רק את הערך שיוחזר מחישוב הביטוי, וערך זה הוא תמיד זהה בהנחה שהחישוב מסתיים בשתי השיטות. אז ניצור side-effects...

 שאלה 9: איך אפשר לדעת לפי איזו שיטה עובד האינטרפרטר ? >(define f (lambda(x) (display ‘f) 1) >(define g (lambda (x) 2) >(g (f 3)) Applicative: ‘f2 Normal:2

 שאלה 10: ניזכר במימוש האיטרטיבי להעלאה בחזקה שראינו בשיעור שעבר : (define exp (lambda (b e) (exp-iter b e 1))) (define exp-iter (lambda (b e acc) (cond ((= e 0) acc) (else (exp-iter b (- e 1) (* b acc))))))  מהו ה -Scope של הפונקציה exp-iter? האם זה באמת נחוץ ?

 ניסוח מחדש : (define exp (lambda (b e) (letrec ((exp-iter (lambda (b e acc) (cond ((= e 0) acc) (else (exp-iter b (- e 1) (* b acc))))))) (exp-iter b e 1))))  מה עוד אפשר לשפר..?