text: 函式式響應式程式設計(FRP) 是一種程式設計正規化，它採用函數語言程式設計的基礎部件。FRP被用於GUI、機器人和音樂方面的程式設計，旨在透過顯式的建模時間來簡化這些問題。FRP的形式.函式式響應程式設計，自從1997年由Conal Elliott和保羅·胡達客在ICFP 97論文《函式式響應式動畫》中提出以來，產生了多種形式。其多樣性的一條軸線，是離散與連續語義對比。另一條軸線，是怎樣讓FRP系統可以動態地更改。連續.FRP的最早形式採用了連續的語義，旨在抽象出對程式的意義無關緊要的操作細節。這種形式的關鍵屬性為：這種FRP語義模型在無副作用的語言中通常採用隨時間變化的連續函式。離散.如事件驅動FRP和Elm在0.17版本之前的那種形式，它們要求更新過程是離散的，且由事件驅動。這些形式在FRP的實踐中被加以推崇，它們專注於擁有簡單API的語義，比如在機器人或Web瀏覽器中可以被高效地實現。在這些形式下，行為和事件的概念通常會被合併成訊號，它總是擁有當前值，但會被離散地改變。互動式FRP.Conal Elliott在2008年已經指出，從輸入到輸出，這種普通的FRP模型，不太適合互動式程式。在從輸入對映到輸出的過程中缺乏“執行”程式的能力，可能意味著必須使用以下解決方案之一：planNow :: Event (IO a) -&gt; IO (Event a)實現問題.存在兩種型別的FRP系統，基於推送的和基於拉取的。基於推送的系統接收事件，並將它們推過一個訊號網路來達成結果。基於拉取的系統會等待對結果的需求，並逆向透過該網路檢索所需求的值。某些FRP系統例如Yampa使用取樣，這裡將取樣推過一個訊號網路。這種方法有個缺點：網路在一個計算步驟持續期間必須等待，然後才能發現輸入上的變更。取樣就是個基於推送的FRP示例。Hackage上的Reactive和Etage庫介入了一種叫做“推送-拉取FRP”的方式。按照這種方式，只在需求純粹定義的流上的下一個事件時，才會構造該事件。這些純粹定義的流的行為類似於Haskell中的惰性列表。此為基於拉取的部分。基於推送的部分會在系統外部的事件被帶入系統時使用到。外部的事件會被推送給消費者，這樣它們就可以在它釋出的瞬間找到該事件。
metadata: erhwenkuo/wikipedia-zhtw
metadata: 函式式響應式程式設計
metadata: https://zh.wikipedia.org/wiki?curid=6114590