# Lucid

### From HaskellWiki

EndreyMark (Talk | contribs) m (typographic corrections) |
EndreyMark (Talk | contribs) (→Implementation: A Lucid example (moving average) which is tested by the fast-food implementation) |
||

Line 18: | Line 18: | ||

* [[Media:Lucid.lhs|Lucid.lhs]] |
* [[Media:Lucid.lhs|Lucid.lhs]] |
||

* [[Media:Test.lhs|Test.lhs]] |
* [[Media:Test.lhs|Test.lhs]] |
||

+ | written to mimick and test the following Lucid example (I have made it a little Haskell-like): |
||

+ | <code> |
||

+ | average n = sum n / card |
||

+ | sum n = '''first''' n '''`fby`''' (sum n + '''next''' n) |
||

+ | card = 1 '''`fby`''' succ card |
||

+ | </code> |
||

+ | In fact, <code>first</code>, <code>next</code>, <code>fby</code> are not necessarily primitives in Lucid, but this fast-food implementation treats them as primitives. |
||

+ | |||

A better implementation could be written using the [[arrow]] library available at the [http://www.haskell.org/arrows/download.html Downloads page of Arrows: A General Interface to Computation] written by [http://www.galois.com/~antony/ Antony Courtney], |
A better implementation could be written using the [[arrow]] library available at the [http://www.haskell.org/arrows/download.html Downloads page of Arrows: A General Interface to Computation] written by [http://www.galois.com/~antony/ Antony Courtney], |

## Revision as of 15:22, 11 June 2006

## Contents |

## 1 Introduction

Weblogs Forum: Fluid Programming in Lucid -- good examples, and very good links.

Lucid page written by Bill Wadge, including an excerpt from Lucid Primer book.

Wikipedia article (yet a stub, but useful links).

## 2 Details

The most detailed online material on the details of this language I could find: Raganswamy Jagannathan, Chris Dodd. GLU programmer's guide (downloadable as the 4th paper of GIPSY Publications). The first pages seem to discuss other problems, but it is worth of read further, because a detailed description of Lucid's syntax and semantics is hiding inside this paper (section 3.1.2 on pages 22--38). This paper is part of the Gipsy Project Home Page (GIPSY: A General Intensional Programming System).

## 3 Implementation

A fast-food implementation:

written to mimick and test the following Lucid example (I have made it a little Haskell-like):
```
```

```
```average n = sum n / card
sum n = **first** n **`fby`** (sum n + **next** n)
card = 1 **`fby`** succ card

```
In fact,
```

`first`

, `next`

, `fby`

are not necessarily primitives in Lucid, but this fast-food implementation treats them as primitives.

A better implementation could be written using the arrow library available at the Downloads page of Arrows: A General Interface to Computation written by Antony Courtney,
Henrik Nilsson and
Ross Paterson.

A professional approach based on comonads: see The Essence of Dataflow Programming paper written by Tarmo Uustalu. Comments on this paper can we read in Lambda the Ultimate (but the link given there seems to be broken).