Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
есть обертки для основных графических фреймворков разной степени зрелости: LTK, CL-GTK2, CommonQt, CL-CAIRO2
>перевожу с шепелявого на русский: есть еще кривые поделки, которые иногда можно даже заставить работать. Естественно, о полноценной поддержке и новых версиях речи не идет.

(require (lib "list.ss" "srfi" "1"))
(define (get-raising lst)
(define new_lst (fold (lambda (el iter)
(if (> el (car (cdr (car (cdr iter)))))
(cons (car iter)
(cons
(cons (car (car (cdr iter))) (cons el (cons (+ 1 (car (cdr (cdr (car (cdr iter)))))) '())))
'()))
(if (> (- (car (cdr (cdr (car (cdr iter))))) (car (car (cdr iter)))) (car (cdr (car iter))) )
(cons
(cons (car (car (cdr iter)))
(cons (- (car (cdr (cdr (car (cdr iter))))) (car (car (cdr iter)))) '()))
(cons
(cons (car (cdr (cdr (car (cdr iter)))))
(cons el (cons (+ 1 (car (cdr (cdr (car (cdr iter)))))) '())))
'()))
(cons
(car iter)
(cons
(cons (car (cdr (cdr (car (cdr iter)))))
(cons el (cons (+ 1 (car (cdr (cdr (car (cdr iter)))))) '())))
'()))
)))
'((0 0)(1 0 1))
lst ))
(if (> (- (car (cdr (cdr (car (cdr new_lst))))) (car (car (cdr new_lst)))) (car (cdr (car new_lst))))
(display (cons (car (car (cdr new_lst))) (cons (- (car (cdr (cdr (car (cdr new_lst))))) (car (car (cdr new_lst)))) '() )))
(display (car new_lst))))
(get-raising (read))
А рекурсию лисперы тоже не ставят во главу угла (но не забываем, что многие алгоритмы в принципе являются рекурсивными, поэтому от рекурсии не избавиться). В лиспе основной упор делается на ООП (CLOS — мощнейшая объектная система), на построение абстракций различного уровня, на мощном базовом языке. (Сразу замечу, что лисп — не функциональный ЯП)
Традиционный Лисп имеет динамическую систему типов. Язык является функциональным, но многие поздние версии обладают также чертами императивности, к тому же, имея полноценные средства символьной обработки становится возможным реализовать объектно-ориентированность, примером такой реализации является платформа CLOS.
Простите, если не понятно написал. «Не привязанному к иерархиям классов полиморфизму». Это о том, что полиморфизм в ОО-языках (читай C++, Java) не существует отдельно от наследования (будь то через механизм интерфейсов как в Java, или абстрактных классов (это в хорошем случае), или же простого наследования, которое повсеместно для это используется (в не очень хорошем случае)). Если ОО-язык отказывается от концепции наследования, то он теряет и полиморфизм. Не согласны? Как на счет примера Javascript?
class User
{
public User()
{
name = "lookat";
id = 123;
}
public string name;
public int id;
};
class Chache
{
public bool UserExists(int id)
{
bool result = true;
//Chache search
return result;
}
public User GetUserByID(int id)
{
User result = new User();
//
return result;
}
}
class HttpAPI
{
public User GetUserByName(string name)
{
User result = new User();
//Search
return result;
}
}
class DataIntegrator
{
Chache chache;
HttpAPI httpAPI;
public DataIntegrator(Chache _chache, HttpAPI _httpAPI)
{
chache = _chache;
httpAPI = _httpAPI;
}
public User GetUser(int id)
{
if(chache.UserExists(id))
return chache.GetUserByID(id);
else return null;
}
public User GetUser(string UserName)
{
return httpAPI.GetUserByName(UserName);
}
}
class Program
{
static void Main(string[] args)
{
HttpAPI h = new HttpAPI();
Chache c = new Chache();
DataIntegrator di = new DataIntegrator(c, h);
User u1 = di.GetUser(123);
User u2 = di.GetUser("lookat");
}
}
<code>(defgeneric get-data (source attribute user))
(defmethod get-data ((source (eql :api))
(attribute (eql :posts))
(id integer))
;; собственно код
)
(defmethod get-data ((source (eql :fast)) attribute user)
;; сначала полезем в кеш, потом в API
(or (get-data :cache attribute user)
(get-data :api attribute user)))
</code>
GUI в Common Lisp — еще один миф