For Scheme, we will be using DrRacket. Make sure you include the language directive #lang scheme at the top of each Scheme source file you create. Save your files with the extension .scm.
- An excellent video explaining how recursively adding elements of a list works - The Parable of the Clones
- The Scheme Programming Language by R. Kent Dybvig is available free online.
- A great video on the history of LISP
- John McCarthy on the history of Lisp. And the original LISP paper
- Guy L. Steele Jr & Richard P. Gabriel on The Evolution of Lisp
- The History of Common Lisp
- A StackOverflow question about why the LISP community is so fragmented
- The Evolution of Lisp is from the mid-90's, but contains some good information on the history of Lisp.
- A nice has a summary of an old online discussion about the history of where the names CAR/CDR come from. Near the bottom are some comments from Steve Russell who worked on the initial LISP implementations.
- A detailed chart of the differences between various flavors of Lisp.
- A good discussion about Scheme lists with examples of box & arrow notation
- A PDF explaining Box & Pointer Diagrams
- A Clojure Newbie Guide
- The Newbie's Guide to Learning Clojure
- Clockwise is an IDE for Clojure based on Eclipse
- VIDEO: Clojure for Java Programmers
- A good introduction to Clojure that parallels what we will cover in 240.
- If you are interested in learning even more about functional programming, a student a few semesters ago took this free online course and said it was very good.
- A comparison of OO & Functional Programming by someone learning Clojure
- Clojure for the Brave and True is an introductory Clojure book available online for free.
- Clojure vs LISP, Scheme, & Java
- Effective Programs - 10 Years of Clojure - a talk by the creator of Clojure
- Lightmod is "An all-in-one tool for full stack Clojure" if you want to try Clojure.
- Clojure - the perfect language to expand your brain?
- You can use
#lang rackjureto get some Clojure features in Racket. - Structure and Interpretation of Computer Programs (SICP) is a classic Scheme text. SICP Distilled covers some of the topics from that book using Clojure.
- A comparison of Clojure functions to Java Streams
- VIDEO: An Introduction to Clojure by Stuart Halloway
- Lisp Quickstart - a tutorial for students of an AI class
- Alan Kay on LISP. He also has an interesting comparison of OOP & Functional Programming.
- The Common Lisp Standard document
- The Common Lisp home page
- The book Practical Common Lisp is available free online.
- Nine things that made Lisp different
- Is LISP really functional?
- Peter Norvig's Python for LISP Programmers
- Peter Norvig's Paradigms of Artificial Intelligence is available on GitHub
- An interesting (but very advanced) article on Modern C++ & LISP programming style.
- An introduction to Racket using its picture-drawing libraries
- A detailed overview of S-Expressions
- A proposal to use S-Expressions for inter-business communication.
- It Came From S-Expressions discusses using S-Expressions with Prolog.
- Functional Thinking talk from OSCON 2013 doesn't cover anything about Scheme, but does a good job of explaining where functional programming fits in to modern programming.
- The Power of Composition is a great introduction to Functional Programming. It uses F#, but most of it should be at a level where you can follow it.
- Plain Functional Programming by Martin Odersky is another good talk about some more advanced topics (with Scala) in functional programming.
- Declarative vs Imperative in Functional Programming by Dave Farley has some excellent real-world discussion about the advantages & disadvantages of functional programming
- GNU Guile is one of the more commonly used Scheme implementations.
- Chez Scheme is an open-source Scheme compiler (available on GitHub). You can read about its history here.
- Racket is its own language
- Beautiful Racket is an online book that talks about writing languages with Racket. See Why Language-oriented programming? Why Racket?
Haskell vs Ada vs. C++ vs AWK is an interesting write up about a US Navy experiment in the early 90's which compared different languages and their suitability for creating a prototype of a larger system (written from the perspective of the Haskell developers). It covers some interesting benefits of functional programming. More information:
- A Case Study in Architectural Modelling: The AEGIS System
- An Experiment Using Haskell to Prototype "Geometric Region Servers" for Navy Command and Control
- A list of Functional Programming Jargon
- A practical introduction to FP using Python
- An old Introduction to Functional Programming Book
- F# for Fun and Profit has a lot of resources for learning F#, a functional language that was developed by Microsoft.
- The Functional Style - an introduction to Functional Programming
- Professor Frisby's Mostly Adequate Guide to Functional Programming is an introduction to Functional Programming using JavaScript.
- JavaScript Allongé is another guild to Functional Programming in JavaScript.
- Examples of Higher Order Functions in JavaScript
- What is a Pure Function with examples in Python
- VIDEO: Steven Syrek - Lambda Calculus For People Who Can't Be Bothered to Learn It Part 1 and Part 2
- Algebra and the Lambda Calculus discusses some of the mathematical underpinnings of functional programming.
- VIDEO: Lambda Calculus - Fundamentals of Lambda Calculus & FUnctional Programming in JavaScript by Gabriel Lebec (slides)
- VIDEO: Lambda Calculus Tutorial from PYCON 2019
- VIDEO: Lambda Calculus Then and Now
- Functional Pearls
- A great article on What's Functional Programming All About?
- A Video and paper on Why Functional Programming Matters
- A guide to Functional Programming Jargon
- A blog post asks if Functional Programming can be liberated fro the Von Neumann paradigm.
- ((All those parens!)) discusses S-expressions and there use. The examples are in Clojure, but you should be able to understand most of the examples.
- Myth of the Day: Functional Programmers Don't Use Loops lists several loops and shows their functional equivalent. Note that the functional examples all use higher-order functions to encapsulate the looping behavior.
- The LISP issue of BYTE magazine from 1979.
- LISP & the Foundations of Computing
- There are lots of options for languages based on Lisp, including Scheme. Here is a discussion of Which Lisp dialect do you use and why. Another view in favor of Common Lisp in Why I haven't jumped ship from Common Lisp to Racket (just yet).
- John Carmack on Functional Programming
- Carmack also talked about FP in his keynote at QuakeCon 2013
- Some resources for functional programming in Python.
- McCLIM is a Common Lisp GUI toolkit.
- Pragmatic Functional Programming from The Clean Code Blog
- A discussion of why unnecessary variables are bad for your code.
- An interview from Microsoft about Functional Programming (audio w/ transcript).
- Some thoughts on the Near Future of Programming Languages from Stephen Diehl.
- Why Isn't Functional Programming the Norm
- LambdaNative is a framework for developing mobile apps in Scheme.
- Some common LISP tools
- A LISP application in the pharmaceutical industry
- LISP & the development of the GNU Emacs
- LISP was used in several games. Here are some post-mortem comments about LISP's use in Jax & Dexter.
- The Halo mission scripting language was based on LISP
- The Symbolics, Inc. LISP machine.
- A Road to Common LISP is a guide to learning more about Common LISP.
- A paper describing how LISP is useful for work in bioinformatics & computational biology.
- Sound processing using LISP: Basic sound processing in Common Lisp by Dmitry Petrov
- A very incomplete list of companies using functional programming
- A list of companies using Common LISP
- Another list of companies using Common LISP
- And yet one more list of companies using Common LISP
- A list of companies using Clojure