Функции потоков - PullRequest
       41

Функции потоков

0 голосов
/ 13 февраля 2020

Есть ли более простой способ достичь функциональности многопоточности в ракетке? Я знаю о библиотеке потоков, но мне кажется, что это такая базовая c функциональность, что мне интересно, нет ли какого-то встроенного способа сделать это.

(define (thread x . fns)
    (foldl (lambda (f a) (f a))
           thread
           fns))

Кроме того, вы можете express (lambda (f a) (f a)) проще?

1 Ответ

1 голос
/ 13 февраля 2020

Есть много способов сделать это. Хорошо бы использовать макрос, простая (и, возможно, не совсем правильная) версия которого:

(define-syntax (/> stx)
  (syntax-case stx ()
    [(_ x)
     #'x]
    [(_ x f)
     #'(f x)]
    [(/> x f fs ...)
     #'(/> (f x) fs ...)]
    [/>
     (identifier? #'/>)
     #'(λ (x . fns)
         (for/fold ([r x]) ([f fns])
           (f r)))]))

Теперь, например, (/> x sin cos) расширен до (cos (sin x)): нет запуска время на все. Последнее предложение означает, что (apply /> 1 (list sin cos)) будет работать.

Я не уверен, приведенный выше макрос является полностью правильным, особенно последнее предложение.

...