← All posts tagged Lisp

Today I am happy to make the first release of the Common Lisp implementation “Clasp”. Clasp uses LLVM as its back-end and generates native code. Clasp is a super-set of Common Lisp that interoperates smoothly with C++. The goal is to integrate these two very different languages together as seamlessly as possible to provide the best of both worlds. The C++ interoperation allows Common Lisp programmers to easily expose powerful C++ libraries to Common Lisp and solve complex programming challenges using the expressive power of Common Lisp. Clasp is licensed under the LGPL.
лан // пошел думать почему у Racket JIT не на llvm.

vk.com

LISP▼
Небольшой свод правил.
Запрещено:
1) Мат;
2) Сочувствие, поддержка, и всё что связано с геями.
Нежелательно:
1) Заувалированый мат;
2) оскорбления прямым текстом.
Не преветствуется:
1) холливар на тему лиспов.

Интересная нынче лиспошколота.

О, очередной пылкий вьюноша со «скобочным вебом»!

Ну, попробуй реализуй скобочный веб, чо. Только сперва тебе придется написать свой валидирующий pull-парсер для S-выражений. Стандартный лисповый ридер не вернет AST, пока не распарсит все до последней скобки, а в вебе надо начинать интерпретировать по возможности сразу же.

Затем ты напишешь разборщик и валидатор своих DSL-аналогов HTML и CSS и начнешь реализовывать рендерер. В этот момент обнаружится, что для лиспа нет качественных биндингов к современным GUI-тулкитам. Сперва ты возьмешься за cffi-cairo и cl-cairo2, но выяснится, что они заточены под старые версии Cairo и не работают.

Ты станешь допиливать Cairo-биндинги, но однажды решишь, что Cairo семантически чужд лисп-парадигме и возьмешься писать свою кросс-платформенную библиотеку для поддержки высокопроизводительной векторной графики. Затем ты реализуешь аналог протокола HTTP, только на S-выражениях (назовем его SXTP), потому что HTTP с его убогими URL'ами и методами семантически чужд лисп-парадигме.

После этого встанет вопрос о написании веб-сервера, поддерживающего SXTP. Попутно ты напишешь template engine, аналоги XPath, XSLT, а также ORM и MVC-фреймворк. В этот момент выяснится, что традиционные SQL-базы данных семантически чужды лисп-парадигме, и ты начнешь разрабатывать собственную лисп-ориентированную БД.

В этот момент ты поймешь, что Common Lisp перегружен и недостаточно выразителен, его стандарт раздут, а макросы негигиеничны; что Scheme слишком минималистична и академична; что остальные диалекты лиспа либо маргинальны, либо требуют .NET/JVM. Тут тебе в голову придет идея создать собственный лисп. Ты потратишь несколько лет на разработку стандарта, реализацию языка и переписывание всего вышеперечисленного на твоем новом языке. После этого окажется, что все ужасно тормозит. И это, разумеется, исключительно по той причине, что операционные системы стандарта POSIX семантически чужды лисп-парадигме. Ты начнешь разрабатывать LISP OS.

В процессе разработки выяснится, что эффективная LISP OS для x86/ARM/MIPS не может быть создана в принципе, так как их семантика чужда лисп-парадигме. Ты возьмешься за изучение System C, Verilog, VHDL и в один прекрасный день создашь лисп-машину на FPGA.

В этот момент мозаика чудесным образом сложится. У тебя будут лисп-машина, лисп-OS, лисп-сервер и лисп-браузер. Ты восторженно оглянешься вокруг, и обнаружишь, что половина человечества уже переселилась на Gliese 581, а оставшаяся половина забыла про HTML/CSS/etc., как про страшный сон, и давно пользуется квантовыми компьютерами и квантовыми сетями. Но все это уже будет не важно. У тебя ведь будет лисп-браузер и полноценная замена HTML/CSS на S-выражениях.

Да и жить тебе останется не так и долго, потому что к этому моменту ты уже будешь дряхлым стариком.

На лоре спросили:
/можно ли написать на Racket такую функцию, чтобы внутри неё (в её динамическом окружении) делений на 0 возвращало 0, а не прерывало вычисления/

Короче, да:

(define-syntax-rule (try-or-zero body ...)
  (let/cc k (with-handlers ([exn? (λ _ (k 0))]) 
	      body ...)))

(define (testl l) 
  (if (null? l)
      '()
      (cons (try-or-zero (/ 1 (car l)))
            (testl (cdr l)))))

(testl '(1 2 3 0 5))

настало время факториалов.
--------------------------

мемоизация на ракете.
nothing special.	   

#lang racket 
; replace define with a memoized version
(define-syntax define-memoized
  (syntax-rules ()
    [(_ (f args ...) bodies ...)
     (define f
       ; store the cache as a hash of args => result
       (let ([results (make-hash)])
         ; need to do this to capture both the names and the values
         (lambda (args ...)
           ((lambda vals
              ; if we haven't calculated it before, do so now
              (when (not (hash-has-key? results vals))
                (hash-set! results vals (begin bodies ...)))
              ; return the cached result
              (hash-ref results vals))
            args ...))))]))

; example, fibonacci with memoization
(define-memoized (mfib n)
  (cond
    [(< n 1) 1]
    [else (+ (mfib (- n 1)) (mfib (- n 2)))]))

Больше ада!

Куда спрятались Lisp, Refal и Prolog? Теперь всюду бестолковые Хаскелли и Агды.

Если вы посещали 0chan.hk то читали что я работаю над Symta — объединением Lisp и Refal в один язык с упором на практичность и лаконичность. Даже реализовал на нём клон Warcraft 2:

ru-declarative.livejournal.com

Встречайте феерическое NENUZHNO.
рейтресер на ракете.
github.com

Фичи: никаких фич, только сферы, только ортогональная проекция, только хардкор.
Освещение, прозрачность, тени? we don't need them!

Плюс еще дико тормозит.
Зато рендерит в окошечко и не надо геморроиться с чтением битмапов.

...ОБЕСПЕЧИТЬ ГИГИЕНУ

ПРИШЛО ВРЕМЯ ОБЕСПЕЧИТЬ ГИГИЕНУ
ГИГИЕНА САМА НЕ ОБЕСПЕЧИТСЯ
ТРАНСФОРМИРУЙ СИНТАКСИС, ТРАНСФОРМИРУЙ ЕГО ЕЩЕ РАЗ
ЗАЧЕМ МНЕ DEFMACRO, У МЕНЯ НЕТ ВРЕМЕНИ ЧТОБЫ ЕБАТЬСЯ С НИМ
ЛУЧШЕ ЕЩЕ РАЗ ОБЕСПЕЧИТЬ ГИГИЕНУ
Я ЗАНИМАЮСЬ ГИГИЕНОЙ ПО 3 РАЗА В ДЕНЬ
КАЖДЫЙ СЕАНС ЗАНИМАЕТ ДВАДЦАТЬ МИНУТ
Я ЖИВУ АКТИВНОЙ И ПОЛНОЦЕННОЙ ЖИЗНЬЮ
Я УСПЕШЕН, ПОЭТОМУ ЦЕЛЫЙ ДЕНЬ ЗАНИМАЮСЬ ГИГИЕНОЙ
А ПОСЛЕ ЭТОГО ПИШУ НА LINUX.ORG.RU
ТУПЫЕ ОБЩЕЛИСПЕРЫ ОДЕРЖИМЫ DEFMACRO
А Я СВОБОДНЫЙ ОТ DEFMACRO ЧЕЛОВЕК
СКАЧАТЬ БЕСПЛАТНО И БЕЗ РЕГИСТРАЦИИ МОКРЫЙ RACKET REFERENCE
КРЯК УЛЬТИМАТ КЕЙГЕН РАЗБЛОКИРУЙ MAYBE
SYNTAX-LOCAL-MAKE-DELTA-INTRODUCER LOCAL-TRANSFORMER-EXPAND/CAPTURE-LIFTS
(DATUM->SYNTAX (SYNTAX->DATUM (DATUM->SYNTAX (SYNTAX->DATUM helper-stx))))
ЛУЧШЕ Я ТРАНСФОРМИРУЮ СИНТАКСИС ЕЩЁ РАЗ
И ЗАБУДУ DEFMACRO, ОШИБКИ МНЕ НЕ НУЖНЫ
Я НЕ ЗАНИМАЛСЯ ГИГИЕНОЙ УЖЕ НЕДЕЛЮ
ПОЙДУ ЗАЙМУСЬ
В SYNTAX-CASE ВСЕ ПРОСТО И ПОНЯТНО
НУЖНО ТРАНСФОРМИРОВАТЬ СИНТАКСИС. ЭТО ЖЕ ОЧЕВИДНО КАК ЭТО РЕШИТЬ
ПРИШЛО ВРЕМЯ ОБЕСПЕЧИТЬ ГИГИЕНУ
КОКОКОКОКОКОКО
(syntax-parse #'1 2) -> readline-input::236: ?: bad syntax in: 2
КОКОКОКОКОКОКО