Суровый выхлоп работы ракетовского макростеппера:
(define (g)
(forever (let ([abort abort])
(unless #t (abort)) (abort))))))
Для тех, кому интересно: первый abort имееет контекст из раскрытия макроса while', а второй - из раскрытия макроса
forever', этакие костыли для обхода гигены без использвания stx-params.
сорцы: http://paste.lisp.org/display/138905
соус: barzilay.org/misc/stxparam.pdf
Считаете, что монадные трансформеры это сложно?
Попробуйте разобраться с syntax model в racket!
Ну короче, как обычно было нечего делать, запилил тупую генерацию выпуклой оболочки трех точек (ТРЕУГОЛЬНИК ДА)
методом выпуклых сумм векторов.
Картинко:
http://i.imgur.com/tMDt225.png
Сорсы:
https://github.com/4DA/racket-algorithms/blob/master/build_convex_hull.rkt
Fear of Macros.
Неплохой туториал по макросам.
Русское быдло в рассылке racket
http://lists.racket-lang.org/users/archive/2013-March/056969.html
Хочу начать костылять интерпретатор elisp на racket.
Дальше в планах - реализация недоемакса.
Чят, отговори.
General Parser Combinators in Racket
https://github.com/epsil/gll
На лоре спросили:
/можно ли написать на 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.
; 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)))]))