1 / 7

Curs 7 IA

Curs 7 IA. Macro - uri în Lisp. Macro. Definiție: o funcție care definește o funcție Evaluare în 2 pași: macroexpandare: construirea macro-expresiei evaluarea ei  Orice apel de macro trebuie făcut după definiția de macro Pot să existe definiții de macrouri în macrouri

siusan
Download Presentation

Curs 7 IA

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Curs 7 IA Macro-uriîn Lisp

  2. Macro • Definiție: o funcție care definește o funcție • Evaluare în 2 pași: • macroexpandare: construirea macro-expresiei • evaluarea ei  • Orice apel de macro trebuie făcut după definiția de macro • Pot să existe definiții de macrouri în macrouri • O redefinire a unui macro implică necesitatea redefinirii funcțiilor/macrourilor care îl apelează

  3. Definire-evaluare de macro Definire: (defmacro<nume-M> (<parametri->) <corp>) Apel: (<nume-M> <parametri-actuali>) Evaluare: (…context… (<nume-M> <parametri-A>)…) 1(…context… (… corpexpandat…)…) 2(…context… (… corpexpandat…)…)

  4. Apel de macro în macro Definire: (defmacro macro1(…) (ctx1… (macro1 …)…ctx1)) Evaluare: (ctx2… (macro1 …)…ctx2) (ctx2… 1(ctx1… (macro1 …)…ctx1)…ctx2) (ctx2… 2(ctx-eval1… (macro1 …)…ctx-eval1)…ctx2) (ctx2… (ctx-eval1… 1(ctx1… (macro1 …)…ctx1) …ctx-eval1)…ctx2) (ctx2… (ctx-eval1… 2(ctx-eval1… (macro1 …)…ctx-eval1) …ctx-eval1)…ctx2) ș.a.m.d.

  5. Interpretare vs compilare • Apeluri recursive de macro • Interpretare: Da • Compilare: Nu • efectuează toate macroexpandările la momentul compilării • dar evaluarea nu e lansată la compilare ci doar la apel  un apel interior de macro nu poate fi expandat el însuși

  6. Apostroful-stânga (backquote) • `(<template>) construiește o listă conform modelului indicat de <template> • La evaluare orice formă a listei va fi copiată, cu excepţia: • formelor prefixate de virgulă (,), care sunt evaluate; • unei liste prefixată de o secvenţă virgulă-at (,@), care provoacă inserarea elementelor listei.

  7. Exemplu de evaluare (defmacro my-if (test da nu)`(if ,test ,da ,nu)) (my-if t (setq x 'da) (setq x 'nu)) 1[testt, da(setq x ‘da), nu(setq x ‘nu)] `(if ,test ,da ,nu)) (if t (setq x 'da) (setq x 'nu)) 2 (if t (setq x 'da) (setq x 'nu))  (setq x 'da)  da [x da]

More Related