The table shows acomparison of functional programming languages which compares various features and designs of differentfunctional programming languages.
| Name | Pure | Lazy evaluation | Typing | Abstract data types | Algebraic data types | Data is immutable | Type classes | Garbage collection | First appeared |
|---|---|---|---|---|---|---|---|---|---|
| Common Lisp | No[1] | Simulated withthunks[2] | Dynamic[3] | Yes[4] | Extension[5] | No[6] | ? | Yes | 1984 |
| Scheme | No[7] | Yes[8] | Dynamic[7] | Yes[9] | Simulated with thunks[10] | No[11] | No | Yes | 1975 |
| Racket | No | Default in Lazy Racket[12] | Strong, Dynamic,statically typed withgradual typing in Typed Racket[13] | Yes[14] | Yes, with Algebraic Racket[15] | Partial[16] | No | Yes | 1995 |
| Clojure | No[17] | Yes[18] | Dynamic[19] | Yes[20] | Yes[21] | Yes[22] | No | Yes | 2007 |
| Standard ML | No[23] | No[24][25] | Static[26] | Yes | Yes | Yes[27] | No | Yes | 1983 |
| OCaml | No[28] | Yes[28] | Static[29] | Yes[30] | Yes[31] | Yes[32] | Simulated with parametric modules[33] | Yes | 1996 |
| F# | No[34] | Yes[35] | Static[36] | Yes[37] | Yes[38] | Yes[39] | No | Yes | 2005 |
| Haskell | Yes[40] | Default[41] | Static[42] | Yes[40] | Yes[43] | Yes[44] | Yes[45] | Yes | 1990 |
| Scala | No[46] | Yes[47] | Static[46] | Yes[48] | Yes[48] | Yes[49] | Yes[50] | Yes | 2004 |
| JavaScript | No | Extension[51] | Dynamic[52] | Extension[53] | Extension[54] | Partial[55][56] | ? | Yes | 1995 |
| Clean | Yes[57] | Yes, with optional strictness annotations[58] | Static withuniqueness/optionally dynamic[59] | Yes[58] | Yes[58] | Yes, except for unique types[58] | Yes[58] | Yes | 1987 |
| Miranda | Yes[60] | Default[61] | Static[60] | Yes[62] | Yes[60] | Yes | No | Yes | 1986 |
| SASL | Yes[63] | Yes | Dynamic[64] | Yes | Yes | Yes | No | Yes | 1972 |
| Elixir | No | Stream module[65] | Dynamic | Yes | No | Yes | ? | Yes | 2012 |
| Erlang | No | No[66] | Dynamic | Yes[67] | No | Yes[68] | ? | Yes | 1986 |
| Elm | Yes | No | Static[69] | ? | Yes[70] | Yes[69] | No | Yes | 2012 |
| Futhark | Yes | No | Static[71] | Yes | Yes | Yes[69] | No | Yes | 2014 |
| Python | No[72] | Simulated with generators | Dynamic[73] | Yes[74] | No | Partial[75] | ? | Yes | 1991 |
| Idris | Yes[76] | Yes[76] | Static[76] | Yes[76] | Yes[76] | Yes[76] | Yes[76] | Yes | 2007 |
| Nix | Yes | No | Static[citation needed] | No | Yes | Yes | No | Yes | 2003 |
| Wolfram Language | No | No | Static | Yes | Yes | Yes | No | Yes | 1988 |
| Kotlin | No | Lazy delegation[77] and Sequence[78] | Static | Yes | No | Yes | No | Yes | 2011 |
| Swift | No | No | Static | Yes | Yes | Yes | No | Swift usesAutomatic Reference Counting, which differs fromtracing garbage collection but is designed to provide similar benefits with better performance. | 2014 |
| Julia | No | No[79] | Dynamic[80] | Yes[80] | No | Partial[80] | ? | Yes | 2012 |
| PureScript | Yes | No | Static | Yes | Yes | Yes | Yes | Yes | 2013 |
| Rust | No | Lazy iterators[81] and external libraries[82] | Static[83] | Yes[84] | Yes[85] | Yes[86] | Yes, through traits[84] | No | 2010 |
| Bosque | No | No | Static | Yes | Yes | Yes | ? | Yes | 2019 |
| D | Optional[87][88] | Optional[89] | Static[90] | ? | Yes | Yes[91] | No | Yes[92] | 2001 |
| Gleam | No[93] | Experimental external libraries | Static | Yes | Yes | Yes | No | Yes | 2019 |
{{cite web}}: CS1 maint: multiple names: authors list (link)