rolisz's site

Moar LISP

Că am tot avut discuții cu câțiva colegi legat de anumite probleme la LISP, voi posta re­zolvările la unele (mai cerute de public) și, dacă am chef, le și explic.

First off:

Sa se scrie o functie care plecand de la o lista data ca argument, inverseaza numai secventele continue de atomi. Exemplu:

(a b c (d (e f) g h i)) ==> (c b a (d (f e) i h g))

(defun invers(l)
    (invers_aux l nil)
)
(defun invers_aux(l sir)
    (cond
        ((null l) sir)
        ((atom (car l))
  
continue.

Tutorial Prolog

Cu ocazia apropierii parțialu­lui de Prolog, am găsit și eu o nouă temă pentru un post de blog: câteva exerciții de Prolog rezolvate și explicate.

1. Sa se genereze lista aran­ja­mentelor de K elemente, cu elementele unei liste date. Ex: [2,3,4] K=2 => [[2,3], [3,2], [2,4], [4,2], [3,4], [4,3]]

Aran­ja­mentele sunt alegeri din elementele listei în care ordinea contează. O metodă simplă de a genera aran­ja­mentele este să generăm com­binările și apoi generăm per­mutările fiecăruia. Com­binările le putem genera în două moduri: alegând primul element din listă și reunind cu o combinare mai mică din restul listei, sau dintr-o combinare de aceași mărime din restul listei. Back­trackingul din Prolog will take care of the rest. Per­mutările continue.