Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
Небольшое введение
Alex Ott
http://alexott.net
MarginCon 2010
2 Основы языка
3 Взаимодействие с Java
4 Конкурентное программирование
6 Источники информации
Динамически-типизированный язык
Простой синтаксис, как у всех Lisp’ов
Поддержка интерактивной разработки
Спроектирован в терминах абстракций
Метапрограммирование
Мультиметоды и протоколы (версия 1.2)
Компилируется в байт-код целевых платформ
Доступ к большому количеству существующих библиотек
( defn f i b o
( [ ] ( concat [1 1] ( f i b o 1 1)))
([ a b]
( l e t [ n (+ a b ) ]
( l a z y −s e q ( c o n s n ( f i b o b n ) ) ) ) ) )
( t a k e 100000000 ( f i b o ) )
( defn vrange2 [ n ]
( loop [ i 0
v ( transient [])]
( i f (< i n )
( recur ( inc i ) ( conj ! v i ))
( persistent ! v ))))
Расширяемость
Мультиметоды не привязаны к типам/классам
Диспатчеризация на основании нескольких параметров
Решение принимается на основании результата функции
диспатчеризации
Отличается от CLOS – отсутствие :before, :after, . . .
defmulti – аналог defgeneric.
Определяется как ( defmulti func−name dispatch−fn) + набор
определений конкретных методов (через defmethod)
( defmulti encounter
( fn [ x y ] [ ( : Species x ) ( : Species y ) ] ) )
( d e f m e t h od e n c o u n t e r [ : Bunny : L i o n ] [ b l ] : run−away )
( d e f m e t h od e n c o u n t e r [ : L i o n : Bunny ] [ l b ] : e a t )
( d e f m e t h od e n c o u n t e r [ : L i o n : L i o n ] [ l 1 l 2 ] : f i g h t )
( d e f m e t h od e n c o u n t e r [ : Bunny : Bunny ] [ b1 b2 ] : mate )
( d e f b1 { : S p e c i e s : Bunny } )
( d e f b2 { : S p e c i e s : Bunny } )
( def l 1 { : S p e c i e s : Lion })
( def l 2 { : S p e c i e s : Lion })
( d e f r e c o r d B [ name ] H e l l o
( h e l l o [ t h i s ] ( s t r " H e l l o " ( : name t h i s ) " ! " ) ) )
( h e l l o (B . " U s e r " ) ) ==> " H e l l o U s e r ! "
( e x t e n d −p r o t o c o l H e l l o S t r i n g
( hello [ this ] ( str " Hello " this "!")))
( h e l l o " w o r l d " ) ==> " H e l l o w o r l d ! "
( e x t e n d −p r o t o c o l H e l l o j a v a . l a n g . O b j e c t
( h e l l o [ t h i s ] ( s t r " H e l l o ’" t h i s
" ’ ! (" ( type t h i s ) " ) " ) ) )
( h e l l o 1 ) ==> " H e l l o ’ 1 ’ ! ( c l a s s j a v a . l a n g . I n t e g e r ) "
Вопросы