LINUX.ORG.RU

История изменений

Исправление q0tw4, (текущая версия) :

который особым образом обрабатывает всё, что начинается на vector.

Особым образом обрабатывается saw. vector просто лифтится как в хаскель стрелках. Вобщем идея (play `(vector ,@(for/list ([i 2]) `(saw (* (+ ,i 1) 400) 0))) 3) вполне рабочая, но это как раз пример статического лупа, где количество повторений известно при компиляции. В моем же варианте все так сложно потому, что вместо [i 2] можно написать [i (floor (* 1.9 (saw 20 0)))] и получить 20 раз в секунду отваливающийся второй канал.

если бы play было функцией

Он макрос потому, что это хитрый ход с неявным eval. Был бы он функцией, транслятор выдал бы ему синтакс, который следовало бы запустить евалом. Только не надо предлагать вместа синтакса делать просто лямбду. Так я до компиляции в C никогда не дойду.

Исходная версия q0tw4, :

который особым образом обрабатывает всё, что начинается на vector.

Особым образом обрабатывается saw. vector просто лифтится как в хаскель стрелках. Вобщем идея (play `(vector ,@(for/list ([i 2]) (saw (* (+ i 1) 400) 0))) 3) вполне рабочая, но это как раз пример статического лупа, где количество повторений известно при компиляции. В моем же варианте все так сложно потому, что вместо [i 2] можно написать [i (floor (* 1.9 (saw 20 0)))] и получить 20 раз в секунду отваливающийся второй канал.

если бы play было функцией

Он макрос потому, что это хитрый ход с неявным eval. Был бы он функцией, транслятор выдал бы ему синтакс, который следовало бы запустить евалом. Только не надо предлагать вместа синтакса делать просто лямбду. Так я до компиляции в C никогда не дойду.