Functional Reactive Programming
Functional reactive programming, or FRP, is a paradigm for
programming hybrid systems (i.e., systems containing a combination of
both continuous and discrete components) in a high-level, declarative
way. An implementation of this concept is Yampa
| paper || use |
| Arrows, Robots, and Functional Reactive Programming Paul Hudak, Antony Courtney, Henrik Nilsson and John Peterson, 2002 || covers most of the presentation inculding AFrob (robots) |
| Functional Reactive Programming, Continued Henrik Nilsson, Antony Courtney and John Peterson, 2002 || dynamic collections - read it if you want to know more of AFP. For an alternative example see next paper |
| The Yampa Arcade Antony Courtney, Henrik Nilsson and John Peterson, 2003 || describes an example application witch uses dynamic collections |
- For more info about Arrows take a look at the page of HaskellArrows or at http://www.haskell.org/arrows/
- If you want to see the robot examples go to the Yampa page and download and compile the package. This is not easy.
- Best changes are with Linux and GHC5 (with profiling libraries) and GreenCard.
- If you have HGL you don't need GreenCard (you can find a binary at http://www.haskell.org/greencard/).
- If you don't have Profiling you need to remove the profiling option in the Makefile
- One of the installs fails because it tries to install a file twice. To fix, open the Makefile and remove the source file from the list of sources, and run make install again.
- If you use windows. Good luck! (I hope you have an working HGL)
Extend rcFollowWall (defined at slide 35) so that the robot turns right when the wall makes a corner to
the right. you can use any function shown in the papers or slides.
- use the range finder to find the distance to the wall in front of you (slide 34)
tooClose, notTooClose :: Distance -> SF RobotInput (Event ())
- use 'switch' to switch behavior between follow the wall or turn (slide 15)
- use a second 'switch' to switch from turning to following the wall again (slide 15)
- when you are stuck, make a drawing of the signal functions
- feel free to contact me at firstname.lastname@example.org
note that instead of the two switches you can use a drSwitch but it needs more understanding.
| name || result |
| 9952330 || + |
| 0019593 ||  |
| 0054445 ||  |
| Arjan Oosting || + |
| Joost Verhoog || - |
| Mart Kolthof ||  |
| Niels van der Velden || + |
| Peter Nagel || - |
| Robert van Herk || - |
mrFinalize (ddVelTR v (lim 0.2 omega))
is not a Signal Function. So you cannot pass it to
- slide 8
- type of first is: SF a b -> SF (a,c) (b,c)
- slide 12
- type of constant is: b -> SF a b
- slide 15
- replace && with &&&
- 22 Sep 2003