<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.sarg.dev/index.php?action=history&amp;feed=atom&amp;title=Value-level_programming</id>
	<title>Value-level programming - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sarg.dev/index.php?action=history&amp;feed=atom&amp;title=Value-level_programming"/>
	<link rel="alternate" type="text/html" href="https://wiki.sarg.dev/index.php?title=Value-level_programming&amp;action=history"/>
	<updated>2026-04-19T05:18:17Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wiki.sarg.dev/index.php?title=Value-level_programming&amp;diff=535531&amp;oldid=prev</id>
		<title>imported&gt;Coldupnorth: add notability template</title>
		<link rel="alternate" type="text/html" href="https://wiki.sarg.dev/index.php?title=Value-level_programming&amp;diff=535531&amp;oldid=prev"/>
		<updated>2025-06-01T10:45:51Z</updated>

		<summary type="html">&lt;p&gt;add notability template&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Notability|date=June 2025}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Value-level programming&amp;#039;&amp;#039;&amp;#039; refers to one of the two contrasting [[programming paradigm]]s identified by [[John Backus]] in his work on [[Program (mathematical object)|programs as mathematical objects]], the other being [[function-level programming]].&amp;lt;ref name=&amp;quot;s286&amp;quot;&amp;gt;{{cite web | title=Concatenative Programming | url=https://web.stanford.edu/class/ee380/Abstracts/171115-slides.pdf |publisher=Stanford University |page=16 | access-date=2025-06-01}}&amp;lt;/ref&amp;gt; Backus originally used the term &amp;#039;&amp;#039;&amp;#039;object-level programming&amp;#039;&amp;#039;&amp;#039; but that term is now prone to confusion with [[object-oriented programming]].&lt;br /&gt;
&lt;br /&gt;
Value-level programs are those that describe how to combine various &amp;#039;&amp;#039;values&amp;#039;&amp;#039; (i.e., numbers, symbols, strings, etc.) to form other values until the final &amp;#039;&amp;#039;result values&amp;#039;&amp;#039; are obtained. New values are constructed from existing ones by the application of various value-to-value functions, such as addition, concatenation, matrix inversion, and so on.&lt;br /&gt;
&lt;br /&gt;
Conventional, [[von Neumann programming languages|von Neumann programs]] are value-level: [[expression (programming)|expression]]s on the right side of [[assignment statement]]s are exclusively concerned with building a value that is then to be stored.&lt;br /&gt;
&lt;br /&gt;
==Connection with Data Types==&lt;br /&gt;
The value-level approach to programming invites the study of the space of values under the value-forming operations, and of the algebraic properties of those operations. This is what is called the study of [[data type]]s, and it has advanced from focusing on the &amp;#039;&amp;#039;&amp;#039;values&amp;#039;&amp;#039;&amp;#039; themselves and their structure, to a primary concern with the value-forming &amp;#039;&amp;#039;&amp;#039;operations&amp;#039;&amp;#039;&amp;#039; and their structure, as given by certain axioms and algebraic laws, that is, to the &amp;#039;&amp;#039;algebraic study of data types&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==Connection with Lambda Calculus languages==&lt;br /&gt;
[[Lambda calculus]]-based languages (such as [[Lisp programming language|Lisp]], [[ISWIM programming language|ISWIM]], and [[Scheme (programming language)|Scheme]]) are &amp;#039;&amp;#039;&amp;#039;in actual practice&amp;#039;&amp;#039;&amp;#039; value-level languages, although they are not thus restricted by design.&lt;br /&gt;
&lt;br /&gt;
To see why typical &amp;#039;&amp;#039;lambda style&amp;#039;&amp;#039; programs are primarily value-level, consider the usual definition of a value-to-value function, say &lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;f&amp;#039;&amp;#039;&amp;#039; = λ&amp;#039;&amp;#039;x&amp;#039;&amp;#039;.&amp;#039;&amp;#039;&amp;#039;E&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
here, &amp;#039;&amp;#039;x&amp;#039;&amp;#039; must be a value variable (since the argument of &amp;#039;&amp;#039;&amp;#039;f&amp;#039;&amp;#039;&amp;#039; is a value by definition) and &amp;#039;&amp;#039;&amp;#039;E&amp;#039;&amp;#039;&amp;#039; must denote a value too (since &amp;#039;&amp;#039;&amp;#039;f&amp;#039;&amp;#039;&amp;#039;&amp;#039;s result is a value by definition). Typically, &amp;#039;&amp;#039;&amp;#039;E&amp;#039;&amp;#039;&amp;#039; is an expression involving the application of value-forming functions to value variables and constants; nevertheless, a few value-forming functions having &amp;#039;&amp;#039;both&amp;#039;&amp;#039; function and value arguments do exist and are used for limited purposes{{cn|date=February 2020}}.&lt;br /&gt;
&lt;br /&gt;
If the term &amp;#039;&amp;#039;values&amp;#039;&amp;#039; is defined to include the value variables themselves, then the value-level view of programming is one of building values by the application of existing programs (value-forming operations/functions) to other values. Lambda-style programming builds a new program from the result-value by lambda-abstracting the value variables.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Function-level programming]] (contrast)&lt;br /&gt;
* [[Programming paradigm]]s&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [https://dl.acm.org/doi/pdf/10.1145/800223.806757 Function Level Programs As Mathematical Objects] from John Backus&lt;br /&gt;
&lt;br /&gt;
{{Programming paradigms navbox}}&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Value-Level Programming}}&lt;br /&gt;
[[Category:Programming paradigms]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Coldupnorth</name></author>
	</entry>
</feed>