AI urice 1: Umetna inteligenca in kaj se lahko naučimo od narave / Osnove lispa
Naloge
Napiši funkcijo flatten, ki sprejme drevo (kot gnezden seznam) poljubne globine in ga spremeni v sploščen seznam.
Primer
(flatten '(a (b (c d) (e (f g)) h) i)) => '(a b c d e f g h i)
Napiši funkcijo unzip, ki sprejme seznam cons parov in ga razcepi v seznam vseh prvih in vseh drugih elementov.
Primer
(unzip '((a . 1) (b . 2) (c . 3))) => '(a b c) '(1 2 3)
Namig
Napiši funkcijo take, ki sprejme sekvenco (seznam ali vektor) in iz nje izžreba n naključnih elementov.
Primer
(take '(a b c d e) 2) => '(e b)
Namig
Dopolni take tako, da sprejme še keyword parameter :weights, s katerim lahko podamo uteži za žreb. Vsak element v :weights je utež istoležnega elementa v prvem parametru.
Primer
(take '(a b c d e) 3 :weights '(0.1 0.1 0.8 0.4 0.1)) => '(c a d)
Napiši funkcije vector+, vector-, vector*, za pare vektorjev.
Primer
(vector+ #(1 2 3) #(1 -2 4)) => #(2 0 7)
Dopolni funkcije iz prejšnje naloge tako, da sprejmejo poljubno mnogo vektorjev.
Napiši funkcije scale, normalize, ki sprejmejo vektor in skalar.
Primer
(scale #(1 2 3) 0.5) => #(0.5 1 1.5)
(normalize #(1 2 3) 3) => #(0.33 0.66 1)
Gradivo
Umetna inteligenca
Lisp
- Splošno
- Prgišče Lispa
- SBCL
Priporočen prevajalnik - Common Lisp HyperSpec
Dokumentacija - Tutorial on Good Lisp Programming Style
- How can I improve my Lisp programming style and coding efficiency?
- CLiki
Zbirka knjižnic in gradiv za Common Lisp - Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part 1
Članek, ki je vse začel - Meditacija o Lispu, programih in življenju
Posnetek predavanja
- On Lisp
Najboljš pregled Lispa in kaj pomeni elegantno programiranje - Pratical Common Lisp
Neženejši uvod - Let Over Lambda
Naprednejši prijemi (neuradno nadaljevanje On Lisp)
- A Hacker's Introduction to Partial Evaluation
- A Lisp through the Looking Glass
- An Incremental Approach to Compiler Construction
- The history of T
Zgodovina enega (sicer pokojnega) Lisp dialekta. Zlasti zanimiva, ker pokaže kaj vse in kdaj so že počeli iz Lispom.
