Unlambda
Unlambda is a programming language. Nothing remarkable there. The originality of Unlambda is that it stands as the unexpected intersection of two marginal families of languages. Functional programming languages, of which the canonical representative is Scheme (a Lisp dialect). This means that the basic object manipulated by the language (and indeed the only one as far as Unlambda is concerned) is the function. Rather, Unlambda uses a functional approach to programming: the only form of objects it manipulates are functions. Each function takes a function as an argument and returns a function. Apart from a binary “apply” operation, Unlambda provides several built-in functions (the most important ones being the K and S combinators). User-defined functions can be created, but not saved or named, because Unlambda does not have any variables.
Learn more
Common Lisp
Common Lisp is the modern, multi-paradigm, high-performance, compiled, ANSI-standardized, most prominent (along with Scheme) descendant of the long-running family of Lisp programming languages. Common Lisp is known for being extremely flexible, having excellent support for object oriented programming, and fast prototyping capabilities. It also sports an extremely powerful macro system that allows you to tailor the language to your application, and a flexible run-time environment that allows modification and debugging of running applications (excellent for server-side development and long-running critical software). It is a multi-paradigm programming language that allows you to choose the approach and paradigm according to your application domain.
Learn more
Racket
Racket is a general-purpose, multi-paradigm programming language that serves as a modern dialect of Lisp and a descendant of Scheme. It is designed as a platform for programming language design and implementation, enabling developers to create new domain-specific and general-purpose languages. Racket's core language includes features such as macros, modules, lexical closures, tail calls, delimited continuations, parameters (fluid variables), software contracts, green threads, and OS threads. The language also comes with primitives, such as event spaces and custodians, which control resource management and enable the language to act like an operating system for loading and managing other programs. Further extensions to the language are created with the powerful macro system, which, together with the module system and custom parsers, can control all aspects of a language. Most language constructs in Racket are implemented as macros in the base language.
Learn more
Scala
Scala combines object-oriented and functional programming in one concise, high-level language. Scala's static types help avoid bugs in complex applications, and its JVM and JavaScript runtimes let you build high-performance systems with easy access to huge ecosystems of libraries. The Scala compiler is smart about static types. Most of the time, you need not tell it the types of your variables. Instead, its powerful type inference will figure them out for you. In Scala, case classes are used to represent structural data types. They implicitly equip the class with meaningful toString, equals and hashCode methods, as well as the ability to be deconstructed with pattern matching. In Scala, functions are values, and can be defined as anonymous functions with a concise syntax.
Learn more