You are on page 1of 2

Compilator online de LISP:

https://www.tutorialspoint.com/execute_lisp_online.php

Elementul de bază este lista.


Lista se scrie între ()
Fiecare element al unei liste este la rândul său fie de bază (atom) fie o listă.
Ex:
(ana are mere) - o listă cu 3 atomi
(ana (maria mihai) au mare) - o listă cu 4 elemente, dintre care 3 atomi și o altă listă

Exemplu de program în LISP:


(princ "Hello World")
(terpri)
(princ "World Hello")
(terpri)
(loop for x from 1 to 10 do
(princ x)
(princ " ")
)

Lista vidă se scrie ca și:


NIL sau () - e singurul element din LISP care este în același timp și atom și listă.

În LISP există liste ale căror elemente sunt atomi "generici" - nu au neapărat un anumit tip de
valoare sau variabilă.
Listele care NU dorim să se evalueze (adică nu dorim ca, de exemplu să se facă suma) se
scriu cu ' în față.
Ex:
Lista (ADD 2 3) - are valoarea 5 (ea se evaluează)
Lista '(ADD 2 3) - rămâne (ADD 2 3) adică o listă cu e elemente: ADD, 2, 3

În limbajul LISP atribuirea se face cu instrucțiunea "SET" care are 2 forme:


(SET v1 v2)
(SETQ v1 v2)

Diferența dintre cele două este că SET evaluează variabila v1, adică NU atribuie variabilei v1
valoarea rezultată din evaluarea lui v2, ci atribuie variabilei ai cărei nume este stocat în v1, cu
excepția cazului în care v1 are apostrof în față.
SETQ în schimb NU evaluează variabila v1.
Deci de fapt:
(SETQ v1 v2) este FIX același lucru cu (SET 'v1 v2)
Exemplu:
(set 'v (+ 2 3)) - atribuie variabilei v rezultatul operației din dreapta, deci t
(princ v) - afișează 5
(set 'v '(+ 2 3)) - atribuie variabilei v lista din dreapta, neevaluată, deci (+ 2 3)
(princ v) - afișează (+ 2 3)
Exemplu:
(set 'v 'cici) - atribuie variabilei v atomul cici
(set v (+ 2 3)) - în momentul în care atribui cu set, pentru că v NU are apostrof în față,
se evaluează acesta, și se obține cici și deci rezultatul NU i se atribuie lui v, ci
variabilei cici
(princ cici) - afișează 5

Exerciții:
(CDR ’((2 (3)) (4 (5 6) 7)))
Evaluate: (CDR ’((2 (3))(4 (5 6) 7))) ((4 (5 6) 7))

Consider the following program fragment: (CAR (CDR (REVERSE (RI VA FL CA TX))))
(SETQ X ’(RI VA FL CA TX)) (CAR (CDR (TX CA FL VA RI)))
(CAR (CDR (REVERSE X))) (CAR (CA FL VA RI))
What is the value of the CAR expression? CA
Given the function definitions for HY and FY as follows: (CAR (HY (CDR (DO RE (MI FA) SO))))
(DEF HY(PARMS) (REVERSE (CDR PARMS))) (CAR (HY (RE (MI FA) SO))) *
(DEF FY(PARMS) (CAR (HY (CDR PARMS)))) (HY (RE (MI FA) SO))= (REVERSE (CDR (RE
What is the value of the following? (MI FA) SO)))= (REVERSE ((MI FA) SO))=
(FY ’(DO RE (MI FA) SO)) (SO (MI FA)) revenim la *
și avem rezultatul
(CAR (SO (MI FA))) = SO
Evaluate the following expression. (EXP (MULT 2 (SUB 5 (DIV (ADD 5 3 4) 2)) 3) 3)
(EXP (MULT 2 (SUB 5 (DIV (ADD 5 3 4) 2)) 3) 3) (EXP (MULT 2 (SUB 5 (DIV 12 2)) 3) 3)
(EXP (MULT 2 (SUB 5 6) 3) 3)
(EXP (MULT 2 -1 3) 3)
(EXP -6 3)
-63 = -36*6 = -216

You might also like