Principles of Programming Languages

Principles of Programming Languages Principles of Programming Languages - Start

Added : 2015-12-02 Views :75K

Download Presentation

Principles of Programming Languages




Download Presentation - The PPT/PDF document "Principles of Programming Languages" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.



Presentations text content in Principles of Programming Languages

Slide1

Principles of Programming Languages

Practice session 3

תחביר ממשי (קונקרטי) ותחביר מופשט (אבסטרקטי)

שיטות חישוב:

Applicative & Normal Evaluation

Partial Evaluation

Slide2

תחביר מופשט

<scheme-exp>: Kinds: <exp>, <define><exp>: Kinds: <atomic>, <composite><atomic>: Kinds: <number>, <boolean>, <variable><composite>: Kinds: <special>, <form><number>: Kinds: numbers.<boolean>: Kinds: #t, #f<variable>: Kinds: Restricted sequences of letters, digits, punctuation marks<special>: Kinds: <lambda>, <quote>, <cond>, <if>

<define>:

Components: Variable: <variable>

Expression: <exp>

<lambda>:

Components: Parameter: <variable>. Amount: >= 0. Ordered.

Body: <exp>. Amount: >= 1 . Ordered.

<quote>:

Components: Quoted-name: <variable>

<if>:

Components: Predicate: <exp>

Consequence: <exp>

Alternative: <exp>

And more…

Slide3

<scheme-exp> -> <exp> | ’(’ <define> ’)’<exp> -> <atomic> | ’(’ <composite> ’)’<atomic> -> <number> | <boolean> | <variable><composite> -> <special> | <form><number> -> Numbers<boolean> -> ’#t’ | ’#f’<variable> -> Restricted sequences of letters, digits, punctuation marks<special> -> <lambda> | <quote> | <cond> | <if> | <let><form> -> <exp>+<define> -> ’define’ <variable> <exp><lambda> -> ’lambda’ ’(’ <variable>* ’)’ <exp>+<quote> -> ’quote’ <variable><cond> -> ’cond’ <condition-clause>* <else-clause><condition-clause> -> ’(’ <exp> <exp>+ ’)’<else-clause> -> ’(’ ’else’ <exp>+ ’)’<if> -> ’if’ <exp> <exp> <exp><let> -> ’let’ ’(’ <var-initialization>* ’)’ <exp>+

תחביר ממשי

Slide4

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

תחביר ממשי ותחביר מופשט

Slide5

<scheme-exp>: Kinds: <exp>, <define><exp>: Kinds: <atomic>, <composite><composite>: Kinds: <special>, <form><special>: Kinds: <lambda>, <quote>, <cond>, <if> <when>: Components: Test: <exp> Body: <exp>+ Amount: >=1. Ordered

תחביר מופשט

,

<when>

Slide6

<scheme-exp> -> <exp> | ’(’ <define> ’)’<exp> -> <atomic> | ’(’ <composite> ’)’<composite> -> <special> | <form><special> -> <lambda> | <quote> | <cond> | <if> | <let><if> -> ’if’ <exp> <exp> <exp><when> -> ‘when’ <exp> <exp>+

תחביר ממשי

|

<when>

Slide7

שאלה 2: ראינו שהתחביר הממשי תומך בהגדרת משתנה באופן הבא:<define> -> ‘define’ <variable> <exp>איך ישתנה התחביר אם נרצה להוסיף אפשרות להגדיר משתנה כך: (x is 3) ?תשובה: התחביר הממשי ישתנה כך:<define> -> ‘define’ <variable> <exp>

תחביר ממשי ותחביר מופשט

| <variable> ‘is‘ <exp>

רק

!

Slide8

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

שיטות חישוב

Slide9

שאלה 4: לכל מופע קושר (Binding Instance) ציינו את תחום ההגדרה (Scope) שלו ואת המופעים הקשורים (Bound Occurrence) אליו. כמו כן, ציינו מופעים חופשיים של משתנים: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))))

שיטות חישוב

Slide10

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

Renaming & Substitution

Slide11

>(define z not)>(((lambda (x) (lambda (z) (x z))) (lambda (w) (z w))) #f)

שיטות חישוב

>(define z not)>(((lambda (x) (lambda (z1) (x z1))) (lambda (w1) (z w1))) #f)

Slide12

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

שיטות חישוב

Slide13

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

שיטות חישוב

Slide14

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

שיטות חישוב

Slide15

שאלה 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)) בשני האלגוריתמים?

שיטות חישוב

Slide16

>(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]==> <closure (lambda (x y) (if (= x 0) 0 y))> (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[ = ] ==>#<primitive-procedure => normal-eval[ 0 ] ==>0 normal-eval[ 0 ] ==>0 ==> #t normal-eval[0] ==> 0 ==>0

מה היה קורה אם היינו מחשבים לפי

applicative-

eval

??

Slide17

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

שיטות חישוב

Slide18

שאלה 9: איך אפשר לדעת לפי איזו שיטה עובד האינטרפרטר?> (define normal (lambda () (display 'applicative) 0 ))> (define test (lambda(x) 1))> (test (normal))Applicative: ‘applicative 1Normal: 1

שיטות חישוב

Slide19

שאלה 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?  

שיטות חישוב

Slide20

ניסוח מחדש:(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))))  מה עוד אפשר לשפר..?

שיטות חישוב


About DocSlides
DocSlides allows users to easily upload and share presentations, PDF documents, and images.Share your documents with the world , watch,share and upload any time you want. How can you benefit from using DocSlides? DocSlides consists documents from individuals and organizations on topics ranging from technology and business to travel, health, and education. Find and search for what interests you, and learn from people and more. You can also download DocSlides to read or reference later.
Youtube