Squigol(ID:2527/squ005)


for the squiggly symbols it uses

functional programming language based on the Bird-Meertens Formalism


People:
Related languages
Abstracto => Squigol   Evolution of
APL => Squigol   Influence
BMF => Squigol   Implementation
FP => Squigol   Influence

References:
  • Bird, Richard S. "Introduction to the Theory of Lists". Technical Report PRG-56, Oxford University Computing Laboratory, Programming Research Group, October 1986. view details
  • Meertens, L "Algorithmics - towards programming as a mathematical activity" in J W deBakker, M Hazewinkel, and L K Lenstra, editors, CWI Symposium on Mathematics and Computer Science, Vol.1, pages 289-334. CWI monographs, North-Holland, 1986. view details
  • Bird, R. S. "An introduction to the theory of lists" Logic of Programming and Calculi of Discrete Design. NATO ASI Series F: Computer and Systems Sciences, Volume 36 Author: Broy, Manfred, ed Springer 1987 Marktoberdorf, Germany pp5-42 1987 view details
  • Meertens, L. G. L. T. "An Abstracto Reader prepared for IFIP WG 2.1. Technical Report CWI Note CS-N8702, Centrum voor Wiskunde en Informatica, April 1987. view details
  • Bird, R. S. "Lecture notes on constructive functional programming" Technical monograph 69; PRG, Oxford University, September 1988. view details
  • Pressburger, Thomas "Maximum Sum Subsegment Derivation" January 18, 1988 view details Abstract: This paper reviews an algebraic language (SQUIGOL), a theory of lists, and an equational style of reasoning (due to Richard S. Bird [1] and Lambert Meertens [3]), and then carries out some derivations due to Douglas R. Smith [4]. I first introduce the operators of the algebraic language, along with some of their useful properties, and present a few results from Bird's Theory of Lists. Then I give (partial) derivations for divide and conquer algorithms for the maximum sum subsegment and maximum sum subrectangle problems. The tupling program transformation proves useful, and is described. Extract: Summary
    The SQUIGOL notation is concise, inspired by algebra, APL and FP, and very amenable to hand manipulation. A SQUIGOL program can be rather dense, but spreading it out over more characters would not make it any clearer. Bird has developed an interesting theory of sequences. Sequences are ubiquitous in computing, so computer scientists should develop a theory that helps solve problems that involve sequences, just as mathematicians have developed a theory of numbers that helps to solve problems that involve numbers.
    The derivation shows the power of defining appropriate domain-specific operators, such as segs, and studying their properties.
  • Pressburger, Thomas "Squigol Exercises" 1989 view details
  • "The Squiggolist", ed Johan Jeuring, published irregularly by CWI Amsterdam. view details
  • Bird, R.S. "A Calculus of Functions for Program Derivation", in Res Topics in Fnl Prog, D. Turner ed, A-W 1990. view details
  • Roe, Paul "Squigol" Chapter 5, pp52-84 of "Parallel Programming using Functional Languages". PhD thesis, Department of Computing Science, University of Glasgow, February 1991 view details Extract: Introduction
    Squigol is the popular name given to the Bird-Meertens formalism, a concise mathematical methodology for program derivation. In essence, Squigol is a functional calculus based on map and reduce. This chapter explores how Squigol may be used to derive parallel functional programs. Much of this chapter applies existing Squigol work to the derivation of parallel algorithms. Previously Squigol has only been used for deriving sequential algorithms and hardware descriptions.
    In some respects Squigol is similar to Backus's FP [7]; they are both algebraic approaches to program transformation. However, unlike FP, Squigol is typed and it is in general more flexible than FP. Bird and Meertens jointly developed Squigol and the following references are highly recommended: [14, 80]. Many people are currently working on Squigol and although there is a consensus on most of Squigol, some aspects are treated differently by different people: notably non-determinism. Thus Squigol should not be regarded as a standardised calculus; usually it is customised to suit the particular class of problems being solved. Here Bird's flavour of Squigol from [14] will be used.
    The next section describes some basic Squigol; the following section looks at the parallel aspects of Squigol and finally three examples are developed: a parallel shortest paths algorithm, a parallel n-queens algorithm and a parallel greedy algorithm.
    It should be noted that it is unclear just how general Squigol is for sequential or parallel program derivation. However, certainly a large class of optimisation algorithms are amenable to derivation using Squigol. Extract: Basics
    Basics
    This section describes some basic Squigol concepts.   Much of what is described is general to sequential and parallel program derivation.
    A Squigol derivation starts with an inefficient specification.    The specification is repeatedly
    transformed by applying algebraic identities and theorems, until an efficient algorithm is derived. Often the initial specification and final program are quite simple, and the derivation is quite complex. Since programs are derived using algebraic identities and theorems, programs will be correct with respect to the specification from which they were derived. One of the Squigol goals is to calculate algorithms without using induction.
    Like FP. the language used for Squigolling is based on combinators. Thus, it is rather like functional programming using combinators as much as possible. Unlike functional programming, functions are assumed to be total, to facilitate algebraic manipulation. A consequence of this is that data structures are finite. Despite this the language does not specify any evaluation order. A drawback of this approach is that the language does not have a formal semantics, unlike functional programming or FP. In particular derivations only guarantee partial correctness.
    Squigol is not even necessarily constructive; in particular function inverses may be used to specify other functions. Also fictitious values may be used[...].
    The notation used is similar to that of a curried functional language; functions are curried and composition is denoted by an infix dot for example [...]. Function application binds more tightly than other operators[...]
  • Bird, Richard and de Moor, Oege "Algebra of Programming", Prentice Hall September 1996 view details
  • Tong, Matthew C. F., Robert C. Uzgalis "Hash Program Development in Squigol" Submitted to 1997 WG2.1 Working Conference on Program Transfomations view details