ICFP Functional Programming Contest

Welcome to the ICFP'98 functional programming contest!

Trying out the finalists

Matthew Flatt of the Rice PLT group has written a GUI for pousse games. You may play against one of the programs, play against a human, watch two programs play each other, or have it step through a recorded game. Matthew has packaged the system up with the six finalists in one tar file. However, you'll also need to fetch the Mr. Ed Scheme system from Rice to run the GUI.

Contest update

The winners have been announced.

We have also received permission from the authors of the six finalist programs to make their entries available -- so if you got whupped in round one, or some missing library kept your program from ever turning over, you can replay the tournament in the comfort of your own home. Click on any of the phase-two finalists below to download their entry.

The tournament is divided in two phases. Phase one was a full round-robin tournament on a 6x6 board. That is, each entry played every other entry twice: once as X, once as O. More detail is available on these games, including a complete ranking of all the entries.

The top 6 entries will go on to the second phase of the tournament, where a full round robin on a 7x7 board will be played among these entries. The six phase-two teams are (in alphabetical order):

Alpha Beta Soupa ST (writeup available)
Ben Jackson
Cilk Pousse (writeup available)
ENS camlists (writeup available)
The results of the second phase will be announced at the ICFP conference.

Note that only one entry from each team is allowed into phase two.

Language statistics

Here are some broad statistics for the primary language used by the various teams:

24 C dialects: C, C++, Cilk
12 ML variants (SML/NJ, Moscow ML, OCaml, OLabel)
3 Scheme
3 Haskell
3 Perl
1 J
1 Mercury
1 Icon

Questions and answers

Players should consult the question log, where we place answers to questions we've received, clarifications, and other ongoing information as the tournament progresses.

We now have a FAQ for the contest, where we're collecting questions of general interest that we've received, and our answers.

The contest

Convinced your favorite functional programming language provides unbeatable productivity? Does it enable painless exploitation of parallel processors? Perhaps it's just the case that functional programming languages attract better programmers than other languages... and you and your friends are the best of the best.

If so, we've provided you the opportunity to prove it! The ICFP steering committee has designed a programming contest to be conducted in conjunction with ICFP'98. All programmers are invited to enter the contest; we especially encourage students to enter teams.

We've designed the programming contest for direct, head-to-head comparison of language technology and programming skill. We have a range of prizes for the winners: cash awards, free conference registrations to ICFP'98 in Baltimore, famous texts on functional languages donated and autographed by the authors, and, of course, unlimited bragging rights.

The details of the contest follow. We request interested applicants to register before the contest starts on Thursday, August 27, 1998.

Team composition

Players may enter alone or as a team. Teams may be of any size -- but we'll offer the friendly advice that the organisational overhead of having more than three or four members on a team will tend to be self-limiting. Anyone is eligible to enter, save members of the ICFP steering committee. We especially encourage students to enter the contest. (And we even have special prizes reserved for possible student winners; see below.)

Contest Overview

On Thursday, August 27, 1998, a challenge task will be posted on the Internet. Teams will have 72 hours to implement a program to perform this task and submit this program to the contest judges. The judges will perform a competition among the submitted programs on a four-processor 150MHz Pentium-Pro box with 128 mbytes of memory running Linux SMP.

Although the precise task chosen will not be revealed until the contest begins, performance matters. Algorithm cleverness matters. We have specifically chosen a parallel machine for the contest so that programs may exploit parallelism. Programming languages that help programmers to rapidly construct complex systems may allow contestants to attempt particularly sophisticated implementations in the 72 hours allotted for programming.

This programming contest is being conducted by ICFP, which implies a context of functional programming. However, rather than debate the definition of a "functional programming language," we will allow submitted programs to be written in any language whatsoever, as long as it has an implementation for Linux x86.


The ICFP steering committee has generously authorised a range of prizes to reward and recognise the contest winners: money, wisdom, peer recognition, and varying degrees of satisfaction.

First Prize

The team winning first prize in the competition will be awarded

Second Prize

The team winning second prize in the competition will be awarded

Judge's Prize

Finally, the Judges' Prize is to be awarded, not on the basis of the competition, but solely at the whim and discretion of the judges. Novel algorithms, interesting languages, beautiful code, arresting user interfaces, use of parallelism -- these things may well count for something in the judges' eyes.

The team winning the Judges' Prize will be awarded

Prize books

We have collected books on functional programming as prizes for the contest. All books will be autographed by the authors. Our list of prize books is: We are grateful to these individuals and organisations for sponsoring the contest.


The contest begins 17:00 EDT, Thursday, August 27, 1998 (17:00 EDT is 21:00 UTC), when the task description will be linked to this web page, e-mailed to all registered contestants, and posted to a set of relevant newsgroups.

Contestants may submit implementations using a submission form. No submissions will be accepted after 17:00 EDT, Sunday, August 30, 1998. You may, however, submit multiple times; the judges will use the last submission received before the contest deadline.

While we are still developing the submission process, it will probably work roughly as follows. Contestants will submit the program as a gzip'd tar file. This tar file should contain (1) an executable driver program runme, (2) a text file Readme containing general remarks, and (3) a directory src/ containing source code. The tar file may also contain an optional support/ directory containing support libraries, binaries, and other data required by the application at run time. The driver program will be invoked with the support/ directory's parent as its working directory; it may access the files it contains as "support/..." Note that if the chosen language implementation does not permit building a standalone binary executable, it is permissible for the runme driver program to be a shell script that starts up the program using binaries contained in the support/ directory.

The Readme file may contain general remarks, such as a description of how the program works, or the programming language(s) used for implementation; it must be signed with the team members' names and email addresses.


We have a form that you may use to register for the contest. It is not strictly necessary to register in advance. However, it helps the contest organizers plan the event, and by registering the email addresses of your team members, you ensure that we can email the task description directly to your team with zero delay when the contest starts.

Good luck & have fun!

Olin Shivers / shivers@ai.mit.edu
Marc Feeley / feeley@IRO.UMontreal.CA