项目作者: fornaroale

项目描述 :
Progetto di Linguaggi di Programmazione
高级语言: Common Lisp
项目地址: git://github.com/fornaroale/progettoLP.git
创建时间: 2019-02-02T16:08:47Z
项目社区:https://github.com/fornaroale/progettoLP

开源协议:

下载


Progetto E2P 2019

Corso di Linguaggi di Programmazione, AA 2018-2019 - UniMiB

Obiettivo

Costruzione di un’estensione “object oriented” di Common Lisp e di Prolog.

Autori

Progetto OOΛ - LISP

Funzioni

  • Consentite: (quasi) tutte quelle che sono nello standard ANSI; LET; LET*; defparameter SOLO top-level (non nelle funzioni)
  • Vietate: SET, SETQ e SETF (a meno che non strettamente necessarie) (nota: l’uso di setf è consentito per modificare gli elementi di una lista); LOOP, DO, DO*, DOTIMES, DOLIST

Caso d’uso

  1. (def-class 'perifericaOutput nil 'marca "sconosciutaMarcaOUt" 'valore 0 'talk '(=> () (write "sono una periferica di output")))
  2. (def-class 'perifericaInput nil 'marca "sconosciutaMarcaINp" 'valore 0 'talk '(=> () (write "sono una periferica di input")))
  3. (def-class 'mouse '(perifericaInput) 'marca "microsoft" 'valore 30 'talk '(=> () (write "sono un mouse")))
  4. (def-class 'tastiera '(perifericaInput) 'marca "trust" 'valore 100 'talk '(=> () (write "sono una tastiera costosa")))
  5. (def-class 'monitor '(perifericaInput perifericaOutput) 'marca "BenQ" 'talk '(=> () (write "sono un monitor molto costoso")))
  6. (def-class 'xsinistri '(mouse) 'marca "logitech" 'valore 200 'talk '(=> () (write "sono un mouse per grandi")))
  7. (def-class 'xdestri '(mouse) 'marca "logiDX" 'valore 50 'talk '(=> () (write "sono un mouse fantastico")))
  8. (def-class 'setup '(xdestri tastiera monitor) 'valore 9)
  9. (defparameter testPersonale (new 'setup 'valore 300))
  10. (getv testPersonale 'valore)
  11. (getv testPersonale 'marca)
  12. (talk testPersonale)

Output atteso: 300 - logiDX - sono un mouse fantastico

Note

Esempio di uso pessimo operatori di assegnamento LISP:

  1. (setf a 1)
  2. (setf b 2)
  3. (setf c (* a b))
  4. ;; Chiamo FOO
  5. (foo a b c))

Questo perchè setf modifica l’ambiente globale! Usare piuttosto let.

CL HyperSpec -> http://clhs.lisp.se/Front/index.htm

Progetto OOΠ - PROLOG

Predicati

  • Consentiti: tutto quello che è nella libreria di SWIPL 7.6.4
  • Vietati: IF (-> e *->), OR (;), possibilmente NOT

SWIPL 7.6.4 Reference -> http://www.swi-prolog.org/download/stable/doc/SWI-Prolog-7.6.4.pdf

Caso d’uso

  1. def_class(perifericaOutput, [], [marca = 'sconosciutaMarcaOUt', valore = 0, talk = method([], (write("Sono una periferica di output")))]).
  2. def_class(perifericaInput, [], [marca = 'sconosciutaMarcaINp', valore = 0, talk = method([], (write("Sono una per. di input")))]).
  3. def_class(mouse, [perifericaInput], [marca = 'microsoft', valore = 30, talk = method([], (write("Sono un mouse")))]).
  4. def_class(tastiera, [perifericaInput], [marca = 'trust', valore = 100, talk = method([], (write("Sono una tastiera")))]).
  5. def_class(monitor, [perifericaInput, perifericaOutput], [marca = 'BenQ', talk = method([], (write("Sono un monitor BenQ")))]).
  6. def_class(xsinistri, [mouse], [marca = 'logitech', valore = 200, talk = method([], (write("Sono un mouse per sinistri")))]).
  7. def_class(xdestri, [mouse], [marca = 'logiDX', valore = 50, talk = method([], (write("Sono un mouse per destri")))]).
  8. def_class(setup, [xdestri, tastiera, monitor], [valore = 9]).
  9. new(testPersonale, setup).
  10. getv(testPersonale, valore, Out).
  11. getv(testPersonale, marca, Out).
  12. talk(testPersonale).

Output atteso: 9 - logiDX - sono un mouse per destri

  1. new(testPersonale2, setup, [valore = 300]).
  2. getv(testPersonale2, valore, Out).
  3. getv(testPersonale2, marca, Out).
  4. talk(testPersonale2).

Output atteso: 300 - logiDX - sono un mouse per destri