Cflp

Laborator

Facultatea de Automatica si Calculatoare 

Departamentul de Calculatoare

 

Home Lucrarea 1 Lucrarea 2 Lucrarea 3 Lucrarea 4 Lucrarea 5 Proiect
  Lucrarea 6 Lucrarea 7 Lucrarea 8 Lucrarea 9 Lucrarea 10  

 

      Lucrarea 7
   

 

 

Subiecte

 

 

PRINT şi READ

 

PRINT primeşte un singur argument pe care îl evaluează şi îl tipăreşte pe o linie nouă. Următorul exemplu afişează pătratele numerelor întregi până când îl oprim:

 

(defun bore-me ()

(do ((n 0 (+ n 1)))

(nil)

(print (* n n))))

(bore-me)

0

1

4

9

...

 

PRINT returnează valoarea argumentului.

Când întâlneşte (READ), interpretorul LISP se opreşte şi aşteaptă ca utilizatorul să scrie o expresie. Această expresie, fără evaluare, devine valoarea lui (READ).

Din cauză că READ nu afişează nimic pentru a indica faptul că aşteaptă o expresie la intrare, este o practică bună să folosim înainte PRINT pentru a semnala că se aşteaptă un răspuns.

 

 

Convenţii pentru simboluri speciale

 

Câteodată este util să avem simboluri ce conţin caractere speciale (spaţii, paranteze etc.)

Acest lucru se realizează prin plasarea de bare verticale în jurul simbolului:

 

(setq simbol1 '|(| )

|(|

(setq simbol2 '|un simbol| )

|un simbol|

(print simbol1)

|(|

|(|

(print simbol2)

|un simbol|

|un simbol|

 

Dacă dorim un simbol neutilizat, putem genera simboluri noi cu GENSYM.

 

(GENSYM)

G1

(GENSYM)

G2

 

 

TERPRI, PRIN1 şi PRINC

 

TERPRI începe o linie nouă.

PRIN1 seamănă cu PRINT dar nu afişează pe o linie nouă şi nu scrie un spaţiu la sfârşit.

PRINC este asemănător cu PRIN1 dar nu vă afişa nici o bară verticală dacă există.

 

(print simbol2)

|un simbol|

|un simbol|

(prin1 simbol2)|un simbol|

|un simbol|

(princ simbol2)un simbol

|un simbol|

 

Probleme

 

1. Scrieţi o procedură PRETTY-PRINT care primeşte un argument (listă generalizată), şi îl afişează după regula:

 

(<element-1> <element-2>

<element-3>

...

<element-n>)

Orice element care este la rândul lui listă, va fi afişat în acelaşi fel recursiv.