YampaでFunctional Reactiveな認知行動療法ボットを書く これはHaskell Advent Calendar その3、13日目の記事です。前日の記事はmatsubara0507さん Haskell Backpack覚え書きでした。 はじめに Functional Reactive Programming(FRP)を使うと、時間軸に沿って入出力の関係が変化するシステムの挙動を、シンボリックに記述し、組み合わせることができます。ロボット、ゲーム、GUIなどのプロラミングに便利です。Yampaは、Arrowの記法をフル活用するFRPのライブラリです。 認知行動療法(Cognitive Behaviour Therapy, CBT)は、医学的に確立された心理療法の一種です。ここでは、CBTの自己対話スキームを提供するボットを、Yampaを使って書いてみます。 目標 時間と入力
FRP(Functional Reactive Programming)というスタイルがある.入力から出力を得る(あらゆる)プログラムを関数風に表現する手法らしい.遅延ストリームは純粋関数型言語にぴったりだと感じるが,あまり流行っていないような気がする. HaskellではFRPのライブラリが複数あるそうだが,よく分からないのでボトムアップに自作してみよう.ゲームといえば入出力と内部状態の塊,楽しそうなのでCUIで動くテトリスを題材とする. 基本 FRPにはEventとBehaviorという概念がある. Eventは,時間と値の組のリストで,離散的なイベントを表す.例えば,キーが押されたというイベント,画面が更新されたというイベントなど. Behaviorは時間の関数で,連続的な値を表す.例えば,経過時間や現在のスコアなど. type Time = Double newtype Event
FRP(Functional Reactive Programming)は、リアクティブプログラミングと関数型プログラミングの性質を持つプログラミングパラダイムである。FRPは古典的FRPと矢矧のFRPに大別される。 古典的FRP 古典的(Classical)FRPは、非連続的な値の列Eventと、常に何らかの値を取るBehaviourの二種類の構造を導入したものである。 代表的な実装としてreactive-banana、euphoria、reflexなどが挙げられる。 Haskellにおいては、EventはIOを通じて非同期的に生成できる設計が多い。Eventはマップやフィルタリングができ、モノイドとして合成することもできる。なお、GenはFRPの構造を扱うのに要求されるモナドで、実装の都合上しばしば必要となる。Behaviourは現在の値を取り出せる他、HaskellならApplica
While code written in Haskell is very declarative and mathematical, as soon as we try to create a user interface, we’ll be slapped on the cheek by a wave of IO that will turn our code procedural in no time. One of the main ideas behind this gaming (ad)venture called Keera Studios is to write more mathematical, robust games. We want these games to be easy to understand and expand, and we want them
報告が遅くなってしまいましたが、 (多分)日本初のElmの勉強会、「Tokyo Elm Programming Meetup」に参加しました! 企画していただいたWyatt, 会場を貸していただいたCasley Consultingさん、ありがとうございました! せっかくなんで軽めのネタで発表して参りました。 半ば飛び込みなところを受け付けて頂きありがとうございました! 以下が資料です。 Whom to Recommend Elm to? 一応Slideshareにも挙げましょう。 ついでに、「何かElmで作ったものないの?」と質問され、 昨年のElm Advent Calendarで作成したラブリーコミューンも意図せず紹介することになり、楽しい発表となりました。 ちょっと緊張したけど割りと受けたようで安心です。 懇親会では結構Haskellとの違いに関する話題が多かったようです。 Has
この記事は ACCESS Advent Calendar 2015 19日目の記事です。 ACCESSの @asukamirai です。 FRP(Functional reactive programming)をサーバのロジックとして使うのはどうなのだろう、ということで試しに感覚を掴むためにやってみました。 使用したFRPのライブラリは、ICFP2015に登場した論文のFRPNow。言語はHaskellです。 確認環境など stack 0.1.10.1 lts-3.18 frpnow-0.18 OS: Windows7 64bit 動機 FRPというと、なんとなくGUI的なものを扱うようなイメージが強かったのですが、その一方で、データフローでプログラミングを行うというのは、ストリーミング処理系のライブラリとも共通する部分がありそうだと思っていました。 先月行われた関数型ストリーム処理勉強会
前書き Egison のドキュメントをいろいろ眺めていたところ The 6 Programming Languages Interesting to Try を読んで Elm という言語を知り、これは面白いと思い Egison そっちのけで Elm をダウンロードしていろいろ遊んでみました。そのうちにいろいろと思うところがあったので Elm Advent Calendar に乗じて徒然なるままに書いてみることにしました。 もし Elm のことは全然知らないというならば、まずは Examples で遊んでみてください。Web 上で Elm を実行して遊べます。 純粋関数型の世界から JavaScript の世界へ Elm は Haskell に非常に良く似た文法を持っています。Haskell と同様、副作用を暗黙に生じさせない「純粋関数型」のアプローチを取っていて、コンパイラは厳密な静的型付
Haskell Advent Calendar 2014 (18日目) 寄稿記事。 はじめに 独学でHaskellを学び始めて2年半が経ちました。圏論やモナド、その他重要な概念を何も理解できていませんが日々楽しくHaskellを使っています。そんな(初心者&底辺)のHaskellerが半年ほど前に無謀にも FRP(Functional Reactive Programming)*1に挑戦してみました。FRPのパッケージは幾つか存在しますが、一番元気良さそう(小並感)にみえたSodium*2 を選択しました。 悪戦苦闘の末、僅かばかりのノウハウを得られましたので、それに基いてSodiumの簡単な紹介記事を書かせて頂きたいと思います。 Sodiumとは Hackageに公開されているSodium Packageの説明ページに拠ると、Sodiumは汎用的な Reactive Programmin
We are extremely happy to announce that we now have several Haskell games working on Android, including our Graphic Adventure engine. Also, we have just begun beta-testing one of the games with real users via Google Play (aka. the Android Market). The first game is a breakout-like game that we already talked about. It is written in the Haskell Functional Reactive Programming (FRP) Domain Specific
Und der Haifisch, der hat Zähne Und die trägt er im Gesicht Und Macheath, der hat ein Messer Doch das Messer sieht man nicht. Threepenny-gui is a GUI framework that uses the web browser as a display. Features include: Easy installation. Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform. HTML + JavaSc
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く