Functional Algorithm Design

  • Richard S. Bird
Invited Lectures
Part of the Lecture Notes in Computer Science book series (LNCS, volume 947)


For an adequate account of a functional approach to Algorithm Design we need to find new translations of classical algorithms and data structures, translations that do not compromise efficiency. For an adequate formal account of a functional approach to the specification and design of algorithms we need to include relations in the underlying theory. These and other points are illustrated in the context of sorting.


Functional Approach Fusion Rule Sorting Algorithm Functional Programming Composition Rule 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. 1.
    R.C. Backhouse, P.J de Bruin, G. Malcolm, E. Voermans, and J.C.S.P. van der Woude. Relational Catamorphisms. In B. Möller, editor Proceedings of the IFIP TC2/WG2.1 Working Conference on Constructing Programs from Specifications, 287–318, 1991.Google Scholar
  2. 2.
    R.S. Bird, J. Gibbons, G. Jones. Formal derivation of a pattern matching algorithm. Science of Computer Programming, 12, 93–104, 1989.Google Scholar
  3. 3.
    Richard Bird and Philip Wadler. Introduction to Functional Programming Prentice Hall International, 1988.Google Scholar
  4. 4.
    Richard Bird and Oege de Moor. The Algebra of Programming. To be published by Prentice Hall International, 1996.Google Scholar
  5. 5.
    Thomas H. Cormen, Charles E. Leiserson, and Ronald L. Rivest. Introduction to Algorithms. MIT Press, Cambridge, Mass. USA, 1990.Google Scholar
  6. 6.
    John Darlington. A synthesis of several sorting algorithms. Acta Informatica 11, 1–30, 1978.Google Scholar
  7. 7.
    P.J. Freyd and A. Ščedrov. Categories, Allegories, volume 39 of Mathematical Library. North-Holland, 1990.Google Scholar
  8. 8.
    A.M. Haeberer and P.A.S. Veloso. Partial relations for program development. in B. Möller (ed.) Constructing Programs from Specifications. Proc. IFIP TC2/WG2.1 Conference, Pacific Grove, CA, USA (1991), North-Holland, Amsterdam (1991), 373–397.Google Scholar
  9. 9.
    Paul Hoogendijk and Oege de Moor. Membership of datatypes. Unpublished Draft, 1993.Google Scholar
  10. 10.
    Rob Hoogerwoord. The design of functional programs: a calculational approach. Ph.D thesis, University of Eindhoven 1989.Google Scholar
  11. 11.
    Geraint Jones and Mary Sheeran. Circuit design in Ruby, in Jørgen Staunstrup (ed.), Formal methods for VLSI design, North-Holland, 1990. pp. 13–70.Google Scholar
  12. 12.
    David King and John Launchbury. Structuring Depth-First Search Algorithms in Haskell. Proc. ACM Principles of Programming Languages, San Francisco, 1995.Google Scholar
  13. 13.
    John Launchbury and Simon Peyton Jones. State in Haskell. University of Glasgow, preprint, 1995.Google Scholar
  14. 14.
    Grant Malcolm. Homomorphisms and promotability. In J. Snepscheut, editor 1989 Groningen Mathematics of Program Construction Conference. Springer-Verlag LNCS 375, 335–347, 1989.Google Scholar
  15. 15.
    Grant Malcolm. Algebraic Types and Program Transformation. Ph.D thesis, University of Groningen, The Netherlands, 1990.Google Scholar
  16. 16.
    Erik Meijer, Maarten Fokkinga, and Ross Paterson. Functional programming with bananas, lenses, envelopes and barbed wire. in John Hughes, (ed.) Proceedings of the 1991 ACM Conference on Functional Programming and Computer Architecture. Springer-Verlag LNCS 523, 1991.Google Scholar
  17. 17.
    B. Möller. Relations as a program development language. in B. Möller (ed.) Constructing Programs from Specifications. Proc. IFIP TC2/WG2.1 Conference, Pacific Grove, CA, USA (1991), North-Holland, Amsterdam (1991), 373–397.Google Scholar
  18. 18.
    B. Möller. Algebraic calculation of graph and sorting algorithms. In D. Bjorner, M. Broy, I.V. Pottosin (eds) Formal methods in Programming and their Applications. Springer-Verlag LNCS 735, 394–413, 1993.Google Scholar
  19. 19.
    O. de Moor. Categories, relations and dynamic programming. D.Phil. thesis. Technical Monograph PRG-98, Computing Laboratory, Oxford, 1992. Also in Mathematical Structures in Computer Science, vol 4 (1), 1994, 33–70.Google Scholar
  20. 20.
    Gunther Schmidt and Thomas Ströhlein. Relations and Graphs. EATCS Monographs on Theoretical Computer Scince. Springer-Verlag, 1991.Google Scholar
  21. 21.
    Robert E. Tarjan. Efficiency of a good but not linear set union algorithm. Journal of the ACM. vol 22 (2), 1975, 215–225.Google Scholar
  22. 22.
    Robert E. Tarjan and Jan van Leeuwen. Worst-case analysis of set union algorithms. Journal of the ACM. vol 31 (2), 1984, 245–281.Google Scholar
  23. 23.
    J.W.J. Williams. Algorithm 232 (heapsort). Communications of the ACM, vol 7, 1964, 347–348.Google Scholar
  24. 24.
    Philip L. Wadler Listlessness is better than Laziness. Ph.D. thesis, Carnegie-Mellon University, USA, 1984.Google Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 1995

Authors and Affiliations

  • Richard S. Bird
    • 1
  1. 1.Programming Research GroupOxford UniversityOxfordUK

Personalised recommendations