Când ar trebui să folosesc un limbaj funcțional? * limbaje: Scala și Clojure * stil de programare, verificare, programare sigură, fără bug-uri Când ar trebui să utilizez construcții din PF? * funcții anonime -> vreau să trimit o funcție ca parametru, callbacks * map, filter, fold/reduce, list comprehensions -> înlocuiesc prelucrarea colecțiilor prin cicluri cu prelucrare prin funcționale / comprehensions * imutabilitate, funcții pure * recursivitate în loc de iterație (dacă am TCO) * compunere de funcții (compunere de funcționalitate) -------------- | v (\x.(\y.\x.y x) \x.x) ^ p.a. - în urma unei beta-reduceri pe care aș face-o, mă uit la variabilele cu același nume beta redex: (\y.\x.y x) corpul: \x.y dacă aș înlocui: \x.x x de după punct devine apariție a lui \x din interior -> nu e corect redenumesc \x din interior Prolog ====== pe linux: prolog program.pl Este preferabil ca editorul pe care îl folosiți să aibă highlighting pentru singleton variables Mindset: ======== Prolog spune dacă ceva este adevărat sau nu, sau în ce condiții poate fi ceva adevărat (ce valori trebuie să aibă variabilele pentru ca interogarea să fie adevărată). Prolog răspunde la interogări. Orice nu este demonstrabil ca adevărat este fals. Programul spune ce este adevărat, și în ce condiții. programul este format din afirmații, care conțin *predicate*. Legare statică Tipare tare, dinamică Sintaxă ======= constantele încep cu literă mică variabilele încep cu litare mare toate afirmațiile și toate interogările se termină cu . predicate(argumente) un predicat este unic identificat de numele său și de numărul de argumente literali, numere, șiruri de caractere liste [], [e1, e2, e3], [H|T] condiții în care este adevărat un predicat "is" realizează calculele aritmetice. Altele ====== La consolă: make pentru reîncărcare dacă sunt mai multe soluții: . sau Enter pentru terminarea interogării ; pentru cererea următoarei soluții