В статье Конала Эллиотта Событие определяется как
type Event a = [(T , a)] -- for non-decreasing times
Это позволит более одного события за раз. В моей библиотеке FRP я хотел бы реализовать функцию:
sample :: Reactive a -> Future () -> Future a
Это будет пробовать реактивное, когда будущее срабатывает. Поскольку реактив может иметь более одного значения в момент, когда срабатывает будущее, как мне его реализовать? Всегда использовать последний, первый или непустой список?
Вот как должна вести себя эталонная функция:
sample
(MkReactive "a"
(MkEvent
(MkFuture 2
(MkReactive "b" ...)
)
)
(MkFuture 1 ())
= MkFuture 1 "a"
@bergey Я использую определения Conal для Reactive, Event и Future.
Вопреки закрытому голосованию, этот вопрос в значительной степени не основан на мнениях. В любом случае, для большей ясности я предлагаю сделать ссылку на статью Конала, которую вы используете. (Похоже на Двухтактное функциональное реактивное программирование, но я только предполагаю.)
@duplode: Спасибо, что указали, что этот вопрос не является вопросом мнения, поскольку есть точная спецификация.
В статье Двухтактное функциональное реактивное программирование (если duplode верен) комбинатор фундаментальной выборки switcher
описывается как:
The semantics of b₀ `switcher` e chooses and samples either b₀ or the last behavior from e before a given sample time t
sample
должен вести себя так же, чтобы быть совместимым с комбинаторами в этой статье. Поскольку Reactive
— это Event
с начальным значением, а Future
— это пара значений времени, sample r (MkFuture t ())
должна возвращать MkFuture t v
, где v
— последнее значение в r
строго перед t
, или начальное значение r
, если такого нет. стоимость. Нет проблем с несколькими значениями одновременно: любые значения во время t
игнорируются, поскольку они не строго предшествуют t
, а для значений до t
«брать последнее» однозначно.
Знаете ли вы причину этого выбора (переключаться с помощью <, а не <=)?
@ 2426021684 Выбор <
, а не <=
имеет решающее значение для того, чтобы самореактивное поведение и системы взаимореактивного поведения имели значения, отличные от нижнего (отсутствие информации / непрекращение), при выборке точно в момент возникновения события.
@Conal, как можно построить самореактивное реактивное поведение или поведение?
@ 2426021684 С предикатным событием, т. е. срабатывающим всякий раз, когда изменяющееся во времени логическое значение становится истинным. Таким образом, поведение может реагировать на условие, связанное с ним (прямо или косвенно), в результате чего условие становится ложным.
Такая же ситуация возникает при непрерывной настройке чисто (без событий) в виде обыкновенных дифференциальных уравнений (ОДУ).
Как ваши Reactive & Future соотносятся с Event & Behavior, как их определяет Конал?