Content deleted Content added
no variables |
CanonNiAWB (talk | contribs) |
||
(34 intermediate revisions by 30 users not shown) | |||
Line 1:
{{Refimprove|date=August 2020}}
'''Unlambda''' is a minimal, "nearly [[Purely functional|pure]]"<ref>http://scienceblogs.com/goodmath/2006/08/friday_pathological_programmin_3.php</ref> [[functional programming language|functional]] [[programming language]] invented by [[David Madore]]. It is based on [[combinatory logic]], a version of the [[lambda calculus]] that omits the lambda operator. It relies mainly on two built-in functions (''s'' and ''k'') and an "apply" operator (written ''`'', the [[backquote]] character). These alone make it [[Turing-complete]], but there are also some I/O functions to make it possible to interact with the user, some shortcut functions and a function for lazy evaluation. There are no variables in the language.▼
{{short description|Functional programming language}}
| logo = <!-- (filename only) -->
| logo caption =
| screenshot = <!-- (filename only) -->
| screenshot caption =
| paradigm = Nearly [[Purely functional programming|pure]] [[Functional programming|functional]]
| family =
| designer = David Madore
| developer = David Madore
| released = {{Start date and age|1999|06|28|df=yes}}
| latest release version = 2.0.0
| latest release date = {{Start date and age|1999|12|20|df=yes}}
| latest preview version =
| latest preview date = <!-- {{Start date and age|YYYY|MM|DD|df=yes}} -->
| typing = [[Type system|Untyped]]
| scope =
| programming language = [[Scheme (programming language)|Scheme]], [[C (programming language)|C]], [[Java (programming language)|Java]]
| discontinued =
| platform =
| operating system =
| license = [[GNU General Public License|GPL]] 2.0 or later
| file ext =
| file format = <!-- or: | file formats = -->
| website = {{URL|www.madore.org/~david/programs/unlambda}}
| implementations =
| dialects =
| influenced by =
| influenced =
}}
▲'''Unlambda''' is a minimal, "nearly [[Purely functional language|pure]]"<ref name="chu2006">{{cite web|work=Good Math, Bad Math (blog)|first=Mark C.|last=Chu-Carroll|date=2006-08-11|title=Friday Pathological Programming: Unlambda, or Programming Without Variables|url=http://scienceblogs.com/goodmath/2006/08/
Unlambda is [[free and open-source software]] distributed under a [[GNU General Public License]] (GPL) 2.0 or later.{{clarify|date=March 2022}}
==Basic principles==
As an [[esoteric programming language]], Unlambda is meant as a demonstration of very pure functional programming rather than for practical use. Its main feature is the lack of conventional operators and data types
Unlambda is based
`r```````````.H.e.l.l.o. .w.o.r.l.di
Line 13 ⟶ 47:
The notation <code>.''x''</code> denotes a function which takes one argument and returns it unchanged, printing the single character ''x'' as a side effect when it is invoked. <code>i</code> represents the version of the identity function that has no such side effect; it is used here as a dummy argument. The program <code>`.di</code> applies the <code>d</code>-printing function to a dummy argument of <code>i</code>, returning <code>i</code> and printing the letter <code>d</code> as a side effect. Similarly, <code>``.l.di</code> first applies <code>.l</code> to <code>.d</code>, printing the letter <code>l</code> and returning <code>.d</code>; this result of <code>.d</code> is then applied to <code>i</code> as in the previous example. The function <code>r</code> is [[syntactic sugar]] for the function that prints a newline character.
Other important features provided by Unlambda include the <code>k</code> and <code>s</code> functions. <code>k</code> manufactures constant functions: the result of <code>`k''x''</code> is a function which, when invoked, returns ''x''. Thus the value of <code>``k''xy''</code> is ''x'' for any ''x'' and ''y''.
<code>s</code> is a generalized evaluation operator. <code>```s''xyz''</code> evaluates to <code>``''xz''`''yz''</code> for any ''x'', ''y'', and ''z''. It is a remarkable fact that <code>s</code> and <code>k</code> are sufficient to perform any calculation
Unlambda's one flow control
Unlambda's next built-in operator is <code>v</code>, which ignores its argument and returns <code>v</code>. This feature is not strictly necessary, since <code>v</code> could be implemented as <code>
==
There is also a "reprint" operator <code>|</code>. When <code>`|''x''</code> is evaluated, the function ''x'' is applied to <code>.''u''</code> if ''u'' is the current character, or to <code>v</code> if there is no current character.
Line 31 ⟶ 65:
==See also==
*[[Iota and Jot]]
*[[SKI combinator calculus]]
▲*[[Joy (programming language)|Joy]]
==References==
{{
* Felix-Hernandez Campos (1 April 2002), ''[http://www.cs.unc.edu/~stotts/144/lectures/lect28apr.pdf Lecture 28: More on functional programming]'', University of North Carolina COMP144
* {{cite book |url=
==External links==
*
[[Category:Esoteric programming languages]]
[[Category:Functional languages]]
{{Esoteric programming languages}}
▲[[es:Unlambda]]
|