We propose a new style of writing graph algorithms in functional languages which is based on an alternative view of graphs as inductively defined data types. We show how this graph model can be implemented efficiently, and then we demonstrate how graph algorithms can be succinctly given by recursive function definitions based on the inductive graph view. We also regard this as a contribution to the teaching of algorithms and data structures in functional languages since we can use the functional-style graph algorithms instead of the imperative algorithms that are dominant today. Keywords: Graphs in Functional Languages, Recursive Graph Algorithms, Teaching Graph Algorithms in Functional Languages
|
404
|
The Science of Programming
– Gries
- 1981
|
|
156
|
Purely functional data structures
– Okasaki
- 1998
|
|
104
|
Elements of Functional Programming
– Reade
- 1993
|
|
45
|
Revisiting catamorphisms over datatypes with embedded functions (or, programs from outer space
– Fegaras, Sheard
- 1996
|
|
33
|
The aggregate update problem in functional programming languges
– Hudak, Bloss
- 1985
|
|
28
|
Uniqueness typing for functional languages with graph rewriting semantics
– BARENDSEN, SMETSERS
- 1996
|
|
28
|
Fully persistent arrays
– Dietz
- 1989
|
|
26
|
Functional Programming with Graphs
– Erwig
- 1997
|
|
25
|
Pattern Matching with Abstract Data Types
– Burton, Cameron
- 1993
|
|
24
|
Simple and efficient purely functional queues and deques
– Okasaki
- 1995
|
|
23
|
Real-time queue operations
– Hood, Melville
- 1981
|
|
20
|
An efficient representation for sparse sets
– Briggs, Torczon
- 1993
|
|
20
|
Structuring depth-first search algorithms in Haskell
– King, Launchburry
- 1995
|
|
19
|
Abstract syntax and semantics of visual languages
– Erwig
- 1998
|
|
19
|
Breadth-first numbering: lessons from a small exercise in algorithm design
– Okasaki
- 2000
|
|
17
|
Order-of-evaluation analysis for destructive updates in strict functional languages with flat aggregates
– Sastry, Clinger
- 1992
|
|
14
|
An efficient functional implementation of FIFO queues
– BURTON
- 1982
|
|
12
|
An efficiency comparison of some representations of purely functional arrays
– Aasa, Holmstrom, et al.
- 1988
|
|
11
|
Manipulating multilinked data structures in a pure functional language
– Burton, Yang
- 1990
|
|
11
|
A new method for functional arrays
– O’Neill, Burton
- 1997
|
|
11
|
ML for the Working Programmer (2nd ed
– Paulson
- 1996
|
|
10
|
Graph algorithms = iteration + data structures? The structure of graph algorithms and a style of programming
– Erwig
- 1992
|
|
10
|
Active Patterns
– Erwig
- 1996
|
|
10
|
Algorithms: a functional programming approach
– Rabhi, Lapalme
- 1999
|
|
9
|
Graph algorithms in a lazy functional programming language
– Kashiwagi, Wise
- 1991
|
|
8
|
Graph Algorithms with a Functional Flavour
– Launchbury
- 1995
|
|
7
|
Abstract Data Types in Standard ML
– Harrison
- 1993
|
|
6
|
Functional Programming and Graph Algorithms
– King
- 1996
|
|
4
|
An Initial Algebra Approach to Directed Acyclic Graphs
– Gibbons
- 1995
|
|
2
|
Fully Persistent Graphs -- Which One to Choose
– Erwig
- 1997
|
|
2
|
A Functional Homage to Graph Reduction
– Erwig
- 1998
|
|
2
|
Random Access to Abstract Data Types
– Erwig
- 2000
|
|
2
|
Efficient Graph Algorithms Using Lazy Monolithic Arrays
– Johnsson
- 1998
|
|
2
|
A New Look at Patternmatching
– GOSTANZA, PEfiA, et al.
- 1996
|
|
1
|
Inductive Graphs and Functional Graph Algorithms 25
– Bird
- 1998
|
|
1
|
Real-Time Deques, Multihead Turing
– Chuang, Goldberg
- 1993
|