Search This Blog

Saturday, May 18, 2024

Butane

From Wikipedia, the free encyclopedia

Properties
C4H10
Molar mass 58.124 g·mol−1
Appearance Colorless gas
Odor Gasoline-like or natural gas-like
Density 2.48 kg/m3 (at 15 °C (59 °F))
Melting point −140 to −134 °C; −220 to −209 °F; 133 to 139 K
Boiling point −1 to 1 °C; 30 to 34 °F; 272 to 274 K
61 mg/L (at 20 °C (68 °F))
log P 2.745
Vapor pressure ~170 kPa at 283 K 
11 nmol Pa−1 kg−1
−57.4·10−6 cm3/mol
Thermochemistry
98.49 J/(K·mol)
−126.3–−124.9 kJ/mol
−2.8781–−2.8769 MJ/mol
Hazards
GHS labelling:
GHS02: Flammable GHS04: Compressed Gas
Danger
H220
P210
NFPA 704 (fire diamond)
Flash point −60 °C (−76 °F; 213 K)
405 °C (761 °F; 678 K)
Explosive limits 1.8–8.4%
NIOSH (US health exposure limits):
PEL (Permissible)
none
REL (Recommended)
TWA 800 ppm (1900 mg/m3)
IDLH (Immediate danger)
1600 ppm
Related compounds
Related alkanes
Related compounds
Perfluorobutane
Supplementary data page
Butane (data page)
Except where otherwise noted, data are given for materials in their standard state (at 25 °C [77 °F], 100 kPa).
check verify (what is check☒ ?)

Butane (/ˈbjuːtn/) or n-butane is an alkane with the formula C4H10. Butane is a highly flammable, colorless, easily liquefied gas that quickly vaporizes at room temperature and pressure. The name butane comes from the root but- (from butyric acid, named after the Greek word for butter) and the suffix -ane. It was discovered in crude petroleum in 1864 by Edmund Ronalds, who was the first to describe its properties, and commercialized by Walter O. Snelling in the early 1910s.

Butane is one of a group of liquefied petroleum gases (LP gases). The others include propane, propylene, butadiene, butylene, isobutylene, and mixtures thereof. Butane burns more cleanly than both gasoline and coal.

History

The first synthesis of butane was accidentally achieved by British chemist Edward Frankland in 1849 from ethyl iodide and zinc, but he had not realized that the ethyl radical dimerized and misidentified the substance.

Edmund Ronalds was the first individual to isolate and describe butane, which he named "hydride of butyl," based on the naming for the then-known butyric acid, which had been named and described by the French chemist Michel Eugène Chevreul 40 years earlier. Other names arose in the 1860s: "butyl hydride", "hydride of tetryl" and "tetryl hydride", "diethyl" or "ethyl ethylide" and others. August Wilhelm von Hofmann, in his 1866 systemic nomenclature, proposed the name "quartane", and the modern name was introduced to English from German around 1874.

Butane did not have much practical use until the 1910s, when W. Snelling identified butane and propane as components in gasoline and found that, if they were cooled, they could be stored in a volume-reduced liquified state in pressurized containers. In 1911, Snelling's liquified petroleum gas was publicly available, and his process for producing the mixture was patented in 1913. Butane is one of the most produced industrial chemicals in the 21st century with around 80-90 billion lbs (40 million US tons, 36 million metric tons) produced by the United States every year.

Density

The density of butane is highly dependent on temperature and pressure in the reservoir. For example, the density of liquid butane is 571.8±1 kg/m3 (for pressures up to 2MPa and temperature 27±0.2 °C), while the density of liquid butane is 625.5±0.7 kg/m3 (for pressures up to 2MPa and temperature -13±0.2 °C).

Isomers

Common name normal butane
unbranched butane
n-butane
isobutane
i-butane
IUPAC name butane methylpropane
Molecular
diagram
Skeletal
diagram

Rotation about the central C−C bond produces two different conformations (trans and gauche) for n-butane.

Reactions

Spectrum of the blue flame from a butane torch showing CH molecular radical band emission and C2 Swan bands

When oxygen is plentiful, butane burns to form carbon dioxide and water vapor; when oxygen is limited, carbon (soot) or carbon monoxide may also be formed. Butane is denser than air.

When there is sufficient oxygen:

2 C4H10 + 13 O2 → 8 CO2 + 10 H2O

When oxygen is limited:

2 C4H10 + 9 O2 → 8 CO + 10 H2O

By weight, butane contains about 49.5 MJ/kg (13.8 kWh/kg; 22.5 MJ/lb; 21,300 Btu/lb) or by liquid volume 29.7 megajoules per liter (8.3 kWh/L; 112 MJ/U.S. gal; 107,000 Btu/U.S. gal).

The maximum adiabatic flame temperature of butane with air is 2,243 K (1,970 °C; 3,578 °F).

n-Butane is the feedstock for DuPont's catalytic process for the preparation of maleic anhydride:

2 CH3CH2CH2CH3 + 7 O2 → 2 C2H2(CO)2O + 8 H2O

n-Butane, like all hydrocarbons, undergoes free radical chlorination providing both 1-chloro- and 2-chlorobutanes, as well as more highly chlorinated derivatives. The relative rates of the chlorination is partially explained by the differing bond dissociation energies, 425 and 411 kJ/mol for the two types of C-H bonds.

Uses

Normal butane can be used for gasoline blending, as a fuel gas, fragrance extraction solvent, either alone or in a mixture with propane, and as a feedstock for the manufacture of ethylene and butadiene, a key ingredient of synthetic rubber. Isobutane is primarily used by refineries to enhance (increase) the octane number of motor gasoline.

For gasoline blending, n-butane is the main component used to manipulate the Reid vapor pressure (RVP). Since winter fuels require much higher vapor pressure for engines to start, refineries raise the RVP by blending more butane into the fuel. n-Butane has a relatively high research octane number (RON) and motor octane number (MON), which are 93 and 92 respectively.

When blended with propane and other hydrocarbons, the mixture may be referred to commercially as liquefied petroleum gas (LPG). It is used as a petrol component, as a feedstock for the production of base petrochemicals in steam cracking, as fuel for cigarette lighters and as a propellant in aerosol sprays such as deodorants.

Pure forms of butane, especially isobutane, are used as refrigerants and have largely replaced the ozone-layer-depleting halomethanes in refrigerators, freezers, and air conditioning systems. The operating pressure for butane is lower than for the halomethanes such as Freon-12 (R-12), so R-12 systems such as those in automotive air conditioning systems, when converted to pure butane, will function poorly. A mixture of isobutane and propane is used instead to give cooling system performance comparable to use of R-12.

Butane is also used as lighter fuel for common lighters or butane torches and is sold bottled as a fuel for cooking, barbecues and camping stoves. In the 20th century the Braun company of Germany made a cordless hair styling device product that used butane as its heat source to produce steam.

As fuel, it is often mixed with small amounts of mercaptans to give the unburned gas an offensive smell easily detected by the human nose. In this way, butane leaks can easily be identified. While hydrogen sulfide and mercaptans are toxic, they are present in levels so low that suffocation and fire hazard by the butane becomes a concern far before toxicity. Most commercially available butane also contains some contaminant oil, which can be removed by filtration and will otherwise leave a deposit at the point of ignition and may eventually block the uniform flow of gas.

The butane used as a solvent for fragrance extraction does not contain these contaminants and butane gas can cause gas explosions in poorly ventilated areas if leaks go unnoticed and are ignited by spark or flame. Purified butane is used as a solvent in the industrial extraction of cannabis oils.

Effects and health issues

Table from the 2010 ISCD study ranking various drugs (legal and illegal) based on statements by drug-harm experts. Butane was found to be the 14th overall most dangerous drug.

Inhalation of butane can cause euphoria, drowsiness, unconsciousness, asphyxia, cardiac arrhythmia, fluctuations in blood pressure and temporary memory loss, when abused directly from a highly pressurized container, and can result in death from asphyxiation and ventricular fibrillation. It enters the blood supply and within seconds produces intoxication. Butane is the most commonly abused volatile substance in the UK, and was the cause of 52% of solvent related deaths in 2000. By spraying butane directly into the throat, the jet of fluid can cool rapidly to −20 °C (−4 °F) by expansion, causing prolonged laryngospasm. "Sudden sniffer's death" syndrome, first described by Bass in 1970, is the most common single cause of solvent related death, resulting in 55% of known fatal cases.

Right to property

From Wikipedia, the free encyclopedia
https://en.wikipedia.org/wiki/Right_to_property

The right to property, or the right to own property (cf. ownership), is often classified as a human right for natural persons regarding their possessions. A general recognition of a right to private property is found more rarely and is typically heavily constrained insofar as property is owned by legal persons (i.e. corporations) and where it is used for production rather than consumption. The Fourth Amendment to the United States Constitution is credited as a significant precedent for the legal protection of individual property rights.

A right to property is specified in Article 17 of the 1948 Universal Declaration of Human Rights, but it is not recognised in the 1966 International Covenant on Civil and Political Rights or in the 1966 International Covenant on Economic, Social and Cultural Rights. The 1950 European Convention on Human Rights acknowledges a right for a natural or legal person to "peaceful enjoyment of his possessions", subject to the "general interest or to secure the payment of taxes."

Definition

The right to property is one of the most controversial human rights, both in terms of its existence and interpretation. The controversy about the definition of the right meant that it was not included in the International Covenant on Civil and Political Rights or the International Covenant on Economic, Social and Cultural Rights. Controversy centres upon who is deemed to have property rights protected (e.g. human beings or also corporations), the type of property which is protected (property used for the purpose of consumption or production) and the reasons for which property can be restricted (for instance, for regulations, taxation or nationalisation in the public interest). In all human rights instruments, either implicit or express restrictions exist on the extent to which property is protected. Article 17 of the Universal Declaration of Human Rights (UDHR) enshrines the right to property as follows:

(1) Everyone has the right to own property alone as well as in association with others. (2) No one shall be arbitrarily deprived of his or her property.

The object of the right to property as it is usually understood nowadays consists of property already owned or possessed, or of property acquired or to be acquired by a person through lawful means. Not in opposition but in contrast to this, some proposals also defend a universal right to private property, in the sense of a right of every person to effectively receive a certain amount of property, grounded in a claim to Earth's natural resources or other theories of justice.

Africa

The African Charter on Human and Peoples' Rights (ACHPR) protects the right to property most explicitly in Article 14, stating:

The right to property shall be guaranteed. It may only be encroached upon in the interest of public need or in the general interest of the community and in accordance with the provisions of appropriate laws.

Property rights are furthermore recognised in Article 13 of the ACHPR, which states that every citizen has the right to participate freely in the government of his country, the right to equal access to public services and "the right of access to public property and services in strict equality of all persons before the law". Article 21 of the ACHPR recognises the right of all peoples to freely dispose of their wealth and natural resources and that this right shall be exercised in the exclusive interest of the people, who may not be deprived of this right. Article 21 also provides that "in case of spoliation the dispossessed people shall have the right to the lawful recovery of its property as well as to adequate compensation".

Americas

When the text of the UDHR was negotiated, other states in the Americas argued that the right to property should be limited to the protection of private property necessary for subsistence. Their suggestion was opposed, but was enshrined in the American Declaration of the Rights and Duties of Man, which was negotiated at the same time and adopted one year before the UDHR in 1948.  Article 23 of the declaration states:

Every Person has the right to own such private property as meets the essential needs of decent living and helps to maintain the dignity of the individual and of the home.

The definition of the right to property is heavily influenced by Western concepts of property rights, but because property rights vary considerably in different legal systems it has not been possible to establish international standards on property rights. The regional human rights instruments of Europe, Africa and the Americas recognise the right to protection of property to varying degrees.

The American Convention on Human Rights (ACHR) recognises the right to protection of property, including the right to "just compensation". The ACHR also prohibits usury and other exploitation, which is unique amongst human rights instruments. Article 21 of the ACHR states:

(1) Everyone has the right to the use and enjoyment of his property. The law may subordinate such use and enjoyment to the interest of society.

(2) No one shall be deprived of his property except upon payment of just compensation, for reasons of public utility or social interest, and in the cases and according to the forms established by law.

(3) Usury and any other form of exploitation of man by man shall be prohibited by law.

Europe

After failed attempts to include the right to protection of property in the European Convention on Human Rights (ECHR), European states enshrined the right to protection of property in Article 1 of Protocol I to the ECHR as the "right to peaceful enjoyment of possessions", where the right to protection of property is defined as such:

(1) Every natural or legal person is entitled to the peaceful enjoyment of his possessions. No one shall be deprived of his possessions except in the public interest and subject to the conditions provided for by law and by the general principles of international law. (2) The preceding provisions shall not, however, in any way impair the right of a State to enforce such laws as it deems necessary to control the use of property in accordance with the general interest or to secure the payment of taxes or other contributions or penalties.

Therefore, European human rights law recognises the right to peaceful enjoyment of property, makes deprivation of possessions subject to certain conditions and recognises that states can balance the right to peaceful possession of property against the public interest. The European Court of Human Rights has interpreted "possessions" to include not only tangible property, but also economic interests, contractual agreements with economic value, compensation claims against the state and public law related claims such as pensions. The European Court of Human Rights has held that the right to property is not absolute and states have a wide degree of discretion to limit the rights. As such, the right to property is regarded as a more flexible right than other human rights. States' degree of discretion is defined in Handyside v. United Kingdom, heard by the European Court of Human Rights in 1976. Notable cases where the European Court of Human Rights has found the right to property having been violated include Sporrong and Lonnroth v. Sweden, heard in 1982, where Swedish law kept property under the threat of expropriation for an extended period of time. The highest economic compensation following a judgment of the Strasbourg Court on this matter was given (1,3 million euro) in case Beyeler v. Italy.

India

In India property rights (Article 31) was one of the fundamental rights of citizens until 1978, and it became a legal right through the 44th Amendment to the Constitution in 1978. The amendment was introduced by the Morarji Desai government as part of land reform policies. In 2020, the Supreme Court of India has stated that, even though property rights are not part of a citizen's fundamental right, it should be considers as one of the human rights promised by the Constitution. The Supreme Court also ruled that the states cannot acquire individual land unless there is a clear legal framework.

International conventions

Property rights are also recognised in the International Convention on the Elimination of All Forms of Racial Discrimination which states in Article 5 that everyone has the right to equality before the law without distinction as to race, colour and national or ethnic origin, including the "right to own property alone as well as in association with others" and "the right to inherit". The Convention on the Elimination of All Forms of Discrimination against Women recognises the property rights in Article 16, which establishes the same right for both spouses to ownership, acquisition, management, administration, enjoyment and disposition of property and Article 15, which establishes women's right to conclude contracts. rights

Property rights are also enshrined in the Convention Relating to the Status of Refugees and the Convention on the Protection of the Rights of All Migrant Workers and Members of Their Families. These international human rights instruments for minorities do not establish a separate right to property, but prohibit discrimination in relation to property rights where such rights are guaranteed.

Relationship to other rights

The right to private property was a crucial demand in early quests for political freedom and equality and against feudal control of property. Property can serve as the basis for the entitlements that ensure the realisation of the right to an adequate standard of living and it was only property owners which were initially granted civil and political rights, such as the right to vote. Because not everybody is a property owner, the right to work was enshrined to allow everybody to attain an adequate standard of living. Today, discrimination on the basis of property ownership is commonly seen as a serious threat to the equal enjoyment of human rights by all and non-discrimination clauses in international human rights instruments frequently include property as a ground on the basis of which discrimination is prohibited (see the right to equality before the law). The protection of private property may come into conflict with economic, social and cultural rights and civil and political rights, such as the right to freedom of expression. To mitigate this, the right to property is commonly limited to protect the public interest. Many states also maintain systems of communal and collective ownership. Property rights have frequently been regarded as preventing the realisation of human rights for all, through for example slavery and the exploitation of others. Unequal distribution of wealth often follows line of sex, race and minorities, therefore property rights may appear to be part of the problem, rather than as an interest that merits protection. Property rights have been at the centre of recent human rights debates on land reform, the return of cultural artifacts by collectors and museums to indigenous peoples and the popular sovereignty of peoples over natural resources.

History

In Europe, The Roman law defined property as "the right to use and abuse one's own within the limits of the law" — jus utendi et abutendi re suâ, guatenus juris ratio patitur. Second, salus populi suprema lex esto, or "the safety of the people shall be the supreme law," was stipulated as early as the Law of the Twelve Tables. The notion of private property and property rights was elaborated further in the Renaissance as international trade by merchants gave rise to mercantilist ideas. In 16th-century Europe, Lutheranism and the Protestant Reformation advanced property rights using biblical terminology. The Protestant work ethic and views on man's destiny came to underline social views in emerging capitalist economies in early modern Europe. The right to private property emerged as a radical demand for human rights vis-a-vis the state in 17th-century revolutionary Europe, but in the 18th and 19th centuries the right to property as a human right became subject of intense controversy.

English Civil War

The arguments advanced by the Levellers during the English Civil War on property and civil and political rights, such as the right to vote, informed subsequent debates in other countries. The Levellers emerged as a political movement in mid-17th century England in the aftermath of the Protestant Reformation. They believed that property which had been earned as the fruit of one's labour was sacred under the Bible's commandment "thou shall not steal". As such, they believed that the right to acquire property from one's work was sacred. Levellers' views on the right to property and the right not to be deprived of property as a civil and political right were developed by the pamphleteer Richard Overton. In "An Arrow against all Tyrants" (1646), Overton argued:

To every individual in nature is given an individual property by nature not to be invaded or usurped by any. For everyone, as he is himself, so he has a self propertiety, else he could not be himself; and of this no second may presume to deprive of without manifest violation and affront to the very principles of nature of the rules of equity and justice between man and man. Mine and thine cannot be, except this. No man has power over my rights and liberties, and I over no man.

The views of the Levellers, who enjoyed support amongst small-scale property-owners and craftsmen, were not shared by all revolutionary parties of the English Civil War. At the 1647 General Council, Oliver Cromwell and Henry Ireton argued against equating the right to life with the right to property. They argued that doing so would establish the right to take anything that one may want, irrespective of the rights of others. The Leveller Thomas Rainsborough responded, relying on Overton's arguments, that the Levellers required respect for others' natural rights. The definition of property and whether it was acquired as the fruit of one's labour and as such a natural right was subject to intense debate because the right to vote depended on property ownership. Political freedom was at the time associated with property ownership and individual independence. Cromwell and Ireton maintained that only property in freehold land or chartered trading rights gave a man the right to vote. They argued that this type of property ownership constituted a "stake in society", which entitles men to political power. In contrast, Levellers argued that all men who are not servants, alms-recipients or beggars should be considered as property owners and be given voting rights. They believed that political freedom could only be secured by individuals, such as craftsmen, engaging in independent economic activity.

Levellers were primarily concerned with the civil and political rights of small-scale property owners and workers, whereas the Diggers, a smaller revolutionary group led by Gerrard Winstanley, focused on the rights of the rural poor who worked on landed property. The Diggers argued that private property was not consistent with justice and that the land that had been confiscated from the Crown and Church should be turned into communal land to be cultivated by the poor. According to the Diggers, the right to vote should be extended to all and everybody had the right to an adequate standard of living. With the Restoration of the English monarchy in 1660, all confiscated land returned to the Crown and Church. Some property rights were recognised and limited voting rights were established. The ideas of the Levellers on property and civil and political rights remained influential and were advanced in the subsequent 1688 Glorious Revolution, but restrictions on the right to vote based on property meant that only a fraction of the British population had the suffrage. In 1780 only 214,000 property-owning men were entitled to vote in England and Wales, less than 3 percent of the population of 8 million. The Reform Act 1832 restricted the right to vote to men who owned property with an annual value of £10, giving approximately 4 percent of the adult male population the right to vote. The reforms of 1867 extended the right to vote to approximately 8 percent. The working class (which increased dramatically with the Industrial Revolution) and industrialists remained effectively excluded from the political system.

John Locke and the American and French revolutions

John Locke's 1689 Two Treatises of Government in which Locke calls "lives, liberties and estates" the "property" of individuals

The English philosopher John Locke (1632–1704) developed the ideas of property, civil and political rights further. In his Second Treatise on Civil Government (1689), Locke proclaimed that "everyman has a property in his person; this nobody has a right to but himself. The labor of his body and the work of his hand, we may say, are properly his". He argued that property ownership derives from one's labor, though those who do not own property and only have their labor to sell should not be given the same political power as those who owned property. Labourers, small-scale property owners and large-scale property owners should have civil and political rights in proportion to the property they owned. According to Locke, the right to property and the right to life were inalienable rights and that it was the duty of the state to secure these rights for individuals. Locke argued that the safeguarding of natural rights, such as the right to property, along with the separation of powers and other checks and balances, would help to curtail political abuses by the state.

Locke's labor theory of property and the separation of powers greatly influenced the American Revolution and the French Revolution. The entitlement to civil and political rights, such as the right to vote, was tied to the question of property in both revolutions. American revolutionaries, such as Benjamin Franklin and Thomas Jefferson, opposed universal suffrage, advocating votes only for those who owned a "stake" in society. James Madison argued that extending the right to vote to all could lead in the right to property and justice being "overruled by a majority without property". While it was initially suggested to establish the right to vote for all men, eventually the right to vote in the nascent United States was extended to white men who owned a specified amount of real estate and personal property.

French revolutionaries recognised property rights in Article 17 of the Declaration of the Rights of Man and of the Citizen (1791), which stated that no one "may be deprived of property rights unless a legally established public necessity required it and upon condition of a just and previous indemnity". Articles 3 and 6 declared that "all citizens have the right to contribute personally or through their representatives" in the political system and that "all citizens being equal before [the law], are equally admissible to all public offices, positions and employment according to their capacity, and without other distinction than that of virtues and talents". However, in practice the French revolutionaries did not extend civil and political rights to all, although the property qualification required for such rights was lower than that established by the American revolutionaries.

According to the French revolutionary Abbé Sieyès, "all the inhabitants of a country should enjoy the right of a passive citizen... but those alone who contribute to the public establishment are like the true shareholders in the great social enterprise. They alone are the true active citizens, the true members of the association". Three months after the Declaration had been adopted, domestic servants, women and those who did not pay taxes equal to three days of labor were declared "passive citizens". Sieyes wanted to see the rapid expansion of commercial activities and favoured the unrestricted accumulation of property. In contrast, Maximilien Robespierre warned that the free accumulation of wealth ought to be limited and that the right to property should not be permitted to violate the rights of others, particularly poorer citizens, including the working poor and peasants. Robespierre's views were eventually excluded from the French Constitution of 1793 and a property qualification for civil and political rights was maintained.

Property is theft!

From Wikipedia, the free encyclopedia
https://en.wikipedia.org/wiki/Property_is_theft!

"Property is theft!" (French: La propriété, c'est le vol!) is a slogan coined by French anarchist Pierre-Joseph Proudhon in his 1840 book What Is Property? or, An Inquiry into the Principle of Right and of Government.

If I were asked to answer the following question: What is slavery? and I should answer in one word, It is murder!, my meaning would be understood at once. No extended argument would be required to show that the power to remove a man's mind, will, and personality, is the power of life and death, and that it makes a man a slave. It is murder. Why, then, to this other question: What is property? may I not likewise answer, It is robbery!, without the certainty of being misunderstood; the second proposition being no other than a transformation of the first?

— Pierre-Joseph Proudhon, What Is Property?

Overview

By "property", Proudhon referred to a concept regarding land property that originated in Roman law: the sovereign right of property, the right of the proprietor to do with his property as he pleases, "to use and [to] abuse", so long as in the end he submits to state-sanctioned title. Proudhon contrasts the supposed right of property with the rights (which he considered valid) of liberty, equality, and security. Proudhon was clear that his opposition to property did not extend to exclusive possession of labor-made wealth. According to George Woodcock,

He was denouncing the property of the man who uses it to exploit the labour of others without any effort of his own. For 'possession', the right of a man to effective control over his dwelling and the land and tools he needed to work and live, Proudhon had only approval; in fact he regarded it as a necessary keystone of liberty, and his main criticism of communism was that they wished to destroy it.

Later, Proudhon argued that property is also liberty, a necessary "bulwark against the ever-encroaching power of the State", and "the only power that can act as a counterweight to the State". His anarchy remained "the government of each by himself" which meant "that political functions have been reduced to industrial functions, and that social order arises from nothing but transactions and exchanges".

In the Confessions d'un révolutionnaire Proudhon further explained his use of this phrase:

In my first memorandum, in a frontal assault upon the established order, I said things like, Property is theft! The intention was to lodge a protest, to highlight, so to speak, the inanity of our institutions. At the time, that was my sole concern. Also, in the memorandum in which I demonstrated that startling proposition using simple arithmetic, I took care to speak out against any communist conclusion.

In the System of Economic Contradictions, having recalled and confirmed my initial formula, I added another quite contrary one rooted in considerations of quite another order—a formula that could neither destroy the first proposition nor be demolished by it: Property is freedom. ... In respect of property, as of all economic factors, harm and abuse cannot be dissevered from the good, any more than debit can from asset in double-entry book-keeping. The one necessarily spawns the other. To seek to do away with the abuses of property, is to destroy the thing itself; just as the striking of a debit from an account is tantamount to striking it from the credit record.

Similar phrases

Jacques Pierre Brissot had previously written, in his Philosophical Inquiries on the Right of Property (Recherches philosophiques sur le droit de propriété et le vol), "Exclusive property is a robbery in nature." Marx would later write in an 1865 letter to a contemporary that Proudhon had taken the slogan from Warville (a name assumed by Brissot, where it is understood that "Warville" is another name for 'Brissot'; see, e.g., Jean Pierre Brissot de Warville), although this is contested by subsequent scholarship.

The phrase also appears in 1797 in the Marquis de Sade's text L'Histoire de Juliette: "Tracing the right of property back to its source, one infallibly arrives at usurpation. However, theft is only punished because it violates the right of property; but this right is itself nothing in origin but theft".

Similar phrases also appear in the works of Saint Ambrose, who taught that superfluum quod tenes tu furaris (the superfluous property which you hold you have stolen) and Basil of Caesarea (Ascetics, 34, 1–2).

Jean-Jacques Rousseau made the same general point when he wrote: "The first man who, having enclosed a piece of ground, bethought himself of saying 'This is mine', and found people simple enough to believe him, was the real founder of civil society. From how many crimes, wars, and murders, from how many horrors and misfortunes might not any one have saved mankind, by pulling up the stakes, or filling up the ditch, and crying to his fellows: Beware of listening to this impostor; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody."

Irish Marxist James Connolly referred to the socialist movement as the "Great Anti-Theft Movement of the Twentieth Century".

Criticism

Karl Marx, although initially favourable to Proudhon's work, later criticised, among other things, the expression "property is theft" as self-refuting and unnecessarily confusing, writing that "'theft' as a forcible violation of property presupposes the existence of property" and condemning Proudhon for entangling himself in "all sorts of fantasies, obscure even to himself, about true bourgeois property".

Max Stirner was highly critical of Proudhon, and in his work, The Ego and Its Own, made the same criticism of Proudhon's expression before Marx, asking, "Is the concept 'theft' at all possible unless one allows validity to the concept 'property'? How can one steal if property is not already extant? ... Accordingly property is not theft, but a theft becomes possible only through property."

Functional programming

From Wikipedia, the free encyclopedia

In computer science, functional programming is a programming paradigm where programs are constructed by applying and composing functions. It is a declarative programming paradigm in which function definitions are trees of expressions that map values to other values, rather than a sequence of imperative statements which update the running state of the program.

In functional programming, functions are treated as first-class citizens, meaning that they can be bound to names (including local identifiers), passed as arguments, and returned from other functions, just as any other data type can. This allows programs to be written in a declarative and composable style, where small functions are combined in a modular manner.

Functional programming is sometimes treated as synonymous with purely functional programming, a subset of functional programming which treats all functions as deterministic mathematical functions, or pure functions. When a pure function is called with some given arguments, it will always return the same result, and cannot be affected by any mutable state or other side effects. This is in contrast with impure procedures, common in imperative programming, which can have side effects (such as modifying the program's state or taking input from a user). Proponents of purely functional programming claim that by restricting side effects, programs can have fewer bugs, be easier to debug and test, and be more suited to formal verification.

Functional programming has its roots in academia, evolving from the lambda calculus, a formal system of computation based only on functions. Functional programming has historically been less popular than imperative programming, but many functional languages are seeing use today in industry and education, including Common Lisp, Scheme, Clojure, Wolfram Language, Racket, Erlang, Elixir, OCaml, Haskell, and F#. Lean is a functional programming language commonly used for verifying mathematical theorems. Functional programming is also key to some languages that have found success in specific domains, like JavaScript in the Web, R in statistics, J, K and Q in financial analysis, and XQuery/XSLT for XML. Domain-specific declarative languages like SQL and Lex/Yacc use some elements of functional programming, such as not allowing mutable values. In addition, many other programming languages support programming in a functional style or have implemented features from functional programming, such as C++11, C#, Kotlin, Perl, PHP, Python, Go, Rust, Raku, Scala, and Java (since Java 8).

History

The lambda calculus, developed in the 1930s by Alonzo Church, is a formal system of computation built from function application. In 1937 Alan Turing proved that the lambda calculus and Turing machines are equivalent models of computation, showing that the lambda calculus is Turing complete. Lambda calculus forms the basis of all functional programming languages. An equivalent theoretical formulation, combinatory logic, was developed by Moses Schönfinkel and Haskell Curry in the 1920s and 1930s.

Church later developed a weaker system, the simply-typed lambda calculus, which extended the lambda calculus by assigning a data type to all terms. This forms the basis for statically typed functional programming.

The first high-level functional programming language, Lisp, was developed in the late 1950s for the IBM 700/7000 series of scientific computers by John McCarthy while at Massachusetts Institute of Technology (MIT). Lisp functions were defined using Church's lambda notation, extended with a label construct to allow recursive functions. Lisp first introduced many paradigmatic features of functional programming, though early Lisps were multi-paradigm languages, and incorporated support for numerous programming styles as new paradigms evolved. Later dialects, such as Scheme and Clojure, and offshoots such as Dylan and Julia, sought to simplify and rationalise Lisp around a cleanly functional core, while Common Lisp was designed to preserve and update the paradigmatic features of the numerous older dialects it replaced.

Information Processing Language (IPL), 1956, is sometimes cited as the first computer-based functional programming language. It is an assembly-style language for manipulating lists of symbols. It does have a notion of generator, which amounts to a function that accepts a function as an argument, and, since it is an assembly-level language, code can be data, so IPL can be regarded as having higher-order functions. However, it relies heavily on the mutating list structure and similar imperative features.

Kenneth E. Iverson developed APL in the early 1960s, described in his 1962 book A Programming Language (ISBN 9780471430148). APL was the primary influence on John Backus's FP. In the early 1990s, Iverson and Roger Hui created J. In the mid-1990s, Arthur Whitney, who had previously worked with Iverson, created K, which is used commercially in financial industries along with its descendant Q.

In the mid-1960s, Peter Landin invented SECD machine, the first abstract machine for a functional programming language, described a correspondence between ALGOL 60 and the lambda calculus, and proposed the ISWIM programming language.

John Backus presented FP in his 1977 Turing Award lecture "Can Programming Be Liberated From the von Neumann Style? A Functional Style and its Algebra of Programs". He defines functional programs as being built up in a hierarchical way by means of "combining forms" that allow an "algebra of programs"; in modern language, this means that functional programs follow the principle of compositionality. Backus's paper popularized research into functional programming, though it emphasized function-level programming rather than the lambda-calculus style now associated with functional programming.

The 1973 language ML was created by Robin Milner at the University of Edinburgh, and David Turner developed the language SASL at the University of St Andrews. Also in Edinburgh in the 1970s, Burstall and Darlington developed the functional language NPL. NPL was based on Kleene Recursion Equations and was first introduced in their work on program transformation. Burstall, MacQueen and Sannella then incorporated the polymorphic type checking from ML to produce the language Hope. ML eventually developed into several dialects, the most common of which are now OCaml and Standard ML.

In the 1970s, Guy L. Steele and Gerald Jay Sussman developed Scheme, as described in the Lambda Papers and the 1985 textbook Structure and Interpretation of Computer Programs. Scheme was the first dialect of lisp to use lexical scoping and to require tail-call optimization, features that encourage functional programming.

In the 1980s, Per Martin-Löf developed intuitionistic type theory (also called constructive type theory), which associated functional programs with constructive proofs expressed as dependent types. This led to new approaches to interactive theorem proving and has influenced the development of subsequent functional programming languages.

The lazy functional language, Miranda, developed by David Turner, initially appeared in 1985 and had a strong influence on Haskell. With Miranda being proprietary, Haskell began with a consensus in 1987 to form an open standard for functional programming research; implementation releases have been ongoing as of 1990.

More recently it has found use in niches such as parametric CAD in the OpenSCAD language built on the CGAL framework, although its restriction on reassigning values (all values are treated as constants) has led to confusion among users who are unfamiliar with functional programming as a concept.

Functional programming continues to be used in commercial settings.

Concepts

A number of concepts and paradigms are specific to functional programming, and generally foreign to imperative programming (including object-oriented programming). However, programming languages often cater to several programming paradigms, so programmers using "mostly imperative" languages may have utilized some of these concepts.

First-class and higher-order functions

Higher-order functions are functions that can either take other functions as arguments or return them as results. In calculus, an example of a higher-order function is the differential operator , which returns the derivative of a function .

Higher-order functions are closely related to first-class functions in that higher-order functions and first-class functions both allow functions as arguments and results of other functions. The distinction between the two is subtle: "higher-order" describes a mathematical concept of functions that operate on other functions, while "first-class" is a computer science term for programming language entities that have no restriction on their use (thus first-class functions can appear anywhere in the program that other first-class entities like numbers can, including as arguments to other functions and as their return values).

Higher-order functions enable partial application or currying, a technique that applies a function to its arguments one at a time, with each application returning a new function that accepts the next argument. This lets a programmer succinctly express, for example, the successor function as the addition operator partially applied to the natural number one.

Pure functions

Pure functions (or expressions) have no side effects (memory or I/O). This means that pure functions have several useful properties, many of which can be used to optimize the code:

  • If the result of a pure expression is not used, it can be removed without affecting other expressions.
  • If a pure function is called with arguments that cause no side-effects, the result is constant with respect to that argument list (sometimes called referential transparency or idempotence), i.e., calling the pure function again with the same arguments returns the same result. (This can enable caching optimizations such as memoization.)
  • If there is no data dependency between two pure expressions, their order can be reversed, or they can be performed in parallel and they cannot interfere with one another (in other terms, the evaluation of any pure expression is thread-safe).
  • If the entire language does not allow side-effects, then any evaluation strategy can be used; this gives the compiler freedom to reorder or combine the evaluation of expressions in a program (for example, using deforestation).

While most compilers for imperative programming languages detect pure functions and perform common-subexpression elimination for pure function calls, they cannot always do this for pre-compiled libraries, which generally do not expose this information, thus preventing optimizations that involve those external functions. Some compilers, such as gcc, add extra keywords for a programmer to explicitly mark external functions as pure, to enable such optimizations. Fortran 95 also lets functions be designated pure. C++11 added constexpr keyword with similar semantics.

Recursion

Iteration (looping) in functional languages is usually accomplished via recursion. Recursive functions invoke themselves, letting an operation be repeated until it reaches the base case. In general, recursion requires maintaining a stack, which consumes space in a linear amount to the depth of recursion. This could make recursion prohibitively expensive to use instead of imperative loops. However, a special form of recursion known as tail recursion can be recognized and optimized by a compiler into the same code used to implement iteration in imperative languages. Tail recursion optimization can be implemented by transforming the program into continuation passing style during compiling, among other approaches.

The Scheme language standard requires implementations to support proper tail recursion, meaning they must allow an unbounded number of active tail calls. Proper tail recursion is not simply an optimization; it is a language feature that assures users that they can use recursion to express a loop and doing so would be safe-for-space. Moreover, contrary to its name, it accounts for all tail calls, not just tail recursion. While proper tail recursion is usually implemented by turning code into imperative loops, implementations might implement it in other ways. For example, Chicken intentionally maintains a stack and lets the stack overflow. However, when this happens, its garbage collector will claim space back, allowing an unbounded number of active tail calls even though it does not turn tail recursion into a loop.

Common patterns of recursion can be abstracted away using higher-order functions, with catamorphisms and anamorphisms (or "folds" and "unfolds") being the most obvious examples. Such recursion schemes play a role analogous to built-in control structures such as loops in imperative languages.

Most general purpose functional programming languages allow unrestricted recursion and are Turing complete, which makes the halting problem undecidable, can cause unsoundness of equational reasoning, and generally requires the introduction of inconsistency into the logic expressed by the language's type system. Some special purpose languages such as Coq allow only well-founded recursion and are strongly normalizing (nonterminating computations can be expressed only with infinite streams of values called codata). As a consequence, these languages fail to be Turing complete and expressing certain functions in them is impossible, but they can still express a wide class of interesting computations while avoiding the problems introduced by unrestricted recursion. Functional programming limited to well-founded recursion with a few other constraints is called total functional programming.

Strict versus non-strict evaluation

Functional languages can be categorized by whether they use strict (eager) or non-strict (lazy) evaluation, concepts that refer to how function arguments are processed when an expression is being evaluated. The technical difference is in the denotational semantics of expressions containing failing or divergent computations. Under strict evaluation, the evaluation of any term containing a failing subterm fails. For example, the expression:

print length([2+1, 3*2, 1/0, 5-4])

fails under strict evaluation because of the division by zero in the third element of the list. Under lazy evaluation, the length function returns the value 4 (i.e., the number of items in the list), since evaluating it does not attempt to evaluate the terms making up the list. In brief, strict evaluation always fully evaluates function arguments before invoking the function. Lazy evaluation does not evaluate function arguments unless their values are required to evaluate the function call itself.

The usual implementation strategy for lazy evaluation in functional languages is graph reduction. Lazy evaluation is used by default in several pure functional languages, including Miranda, Clean, and Haskell.

Hughes 1984 argues for lazy evaluation as a mechanism for improving program modularity through separation of concerns, by easing independent implementation of producers and consumers of data streams. Launchbury 1993 describes some difficulties that lazy evaluation introduces, particularly in analyzing a program's storage requirements, and proposes an operational semantics to aid in such analysis. Harper 2009 proposes including both strict and lazy evaluation in the same language, using the language's type system to distinguish them.

Type systems

Especially since the development of Hindley–Milner type inference in the 1970s, functional programming languages have tended to use typed lambda calculus, rejecting all invalid programs at compilation time and risking false positive errors, as opposed to the untyped lambda calculus, that accepts all valid programs at compilation time and risks false negative errors, used in Lisp and its variants (such as Scheme), as they reject all invalid programs at runtime when the information is enough to not reject valid programs. The use of algebraic datatypes makes manipulation of complex data structures convenient; the presence of strong compile-time type checking makes programs more reliable in absence of other reliability techniques like test-driven development, while type inference frees the programmer from the need to manually declare types to the compiler in most cases.

Some research-oriented functional languages such as Coq, Agda, Cayenne, and Epigram are based on intuitionistic type theory, which lets types depend on terms. Such types are called dependent types. These type systems do not have decidable type inference and are difficult to understand and program with. But dependent types can express arbitrary propositions in higher-order logic. Through the Curry–Howard isomorphism, then, well-typed programs in these languages become a means of writing formal mathematical proofs from which a compiler can generate certified code. While these languages are mainly of interest in academic research (including in formalized mathematics), they have begun to be used in engineering as well. Compcert is a compiler for a subset of the C programming language that is written in Coq and formally verified.

A limited form of dependent types called generalized algebraic data types (GADT's) can be implemented in a way that provides some of the benefits of dependently typed programming while avoiding most of its inconvenience. GADT's are available in the Glasgow Haskell Compiler, in OCaml and in Scala, and have been proposed as additions to other languages including Java and C#.

Referential transparency

Functional programs do not have assignment statements, that is, the value of a variable in a functional program never changes once defined. This eliminates any chances of side effects because any variable can be replaced with its actual value at any point of execution. So, functional programs are referentially transparent.

Consider C assignment statement x=x * 10, this changes the value assigned to the variable x. Let us say that the initial value of x was 1, then two consecutive evaluations of the variable x yields 10 and 100 respectively. Clearly, replacing x=x * 10 with either 10 or 100 gives a program a different meaning, and so the expression is not referentially transparent. In fact, assignment statements are never referentially transparent.

Now, consider another function such as int plusone(int x) {return x+1;} is transparent, as it does not implicitly change the input x and thus has no such side effects. Functional programs exclusively use this type of function and are therefore referentially transparent.

Data structures

Purely functional data structures are often represented in a different way to their imperative counterparts. For example, the array with constant access and update times is a basic component of most imperative languages, and many imperative data-structures, such as the hash table and binary heap, are based on arrays. Arrays can be replaced by maps or random access lists, which admit purely functional implementation, but have logarithmic access and update times. Purely functional data structures have persistence, a property of keeping previous versions of the data structure unmodified. In Clojure, persistent data structures are used as functional alternatives to their imperative counterparts. Persistent vectors, for example, use trees for partial updating. Calling the insert method will result in some but not all nodes being created.

Comparison to imperative programming

Functional programming is very different from imperative programming. The most significant differences stem from the fact that functional programming avoids side effects, which are used in imperative programming to implement state and I/O. Pure functional programming completely prevents side-effects and provides referential transparency.

Higher-order functions are rarely used in older imperative programming. A traditional imperative program might use a loop to traverse and modify a list. A functional program, on the other hand, would probably use a higher-order "map" function that takes a function and a list, generating and returning a new list by applying the function to each list item.

Imperative vs. functional programming

The following two examples (written in JavaScript) achieve the same effect: they multiply all even numbers in an array by 10 and add them all, storing the final sum in the variable "result".

Traditional Imperative Loop:

const numList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let result = 0;
for (let i = 0; i < numList.length; i++) {
  if (numList[i] % 2 === 0) {
    result += numList[i] * 10;
  }
}

Functional Programming with higher-order functions:

const result = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
               .filter(n => n % 2 === 0)
               .map(a => a * 10)
               .reduce((a, b) => a + b, 0);

Sometimes the abstractions offered by functional programming might lead to development of more robust code that avoids certain issues that might arise when building upon large amount of complex, imperative code, such as off-by-one errors (see Greenspun's tenth rule).

Simulating state

There are tasks (for example, maintaining a bank account balance) that often seem most naturally implemented with state. Pure functional programming performs these tasks, and I/O tasks such as accepting user input and printing to the screen, in a different way.

The pure functional programming language Haskell implements them using monads, derived from category theory. Monads offer a way to abstract certain types of computational patterns, including (but not limited to) modeling of computations with mutable state (and other side effects such as I/O) in an imperative manner without losing purity. While existing monads may be easy to apply in a program, given appropriate templates and examples, many students find them difficult to understand conceptually, e.g., when asked to define new monads (which is sometimes needed for certain types of libraries).

Functional languages also simulate states by passing around immutable states. This can be done by making a function accept the state as one of its parameters, and return a new state together with the result, leaving the old state unchanged.

Impure functional languages usually include a more direct method of managing mutable state. Clojure, for example, uses managed references that can be updated by applying pure functions to the current state. This kind of approach enables mutability while still promoting the use of pure functions as the preferred way to express computations.

Alternative methods such as Hoare logic and uniqueness have been developed to track side effects in programs. Some modern research languages use effect systems to make the presence of side effects explicit.

Efficiency issues

Functional programming languages are typically less efficient in their use of CPU and memory than imperative languages such as C and Pascal. This is related to the fact that some mutable data structures like arrays have a very straightforward implementation using present hardware. Flat arrays may be accessed very efficiently with deeply pipelined CPUs, prefetched efficiently through caches (with no complex pointer chasing), or handled with SIMD instructions. It is also not easy to create their equally efficient general-purpose immutable counterparts. For purely functional languages, the worst-case slowdown is logarithmic in the number of memory cells used, because mutable memory can be represented by a purely functional data structure with logarithmic access time (such as a balanced tree). However, such slowdowns are not universal. For programs that perform intensive numerical computations, functional languages such as OCaml and Clean are only slightly slower than C according to The Computer Language Benchmarks Game. For programs that handle large matrices and multidimensional databases, array functional languages (such as J and K) were designed with speed optimizations.

Immutability of data can in many cases lead to execution efficiency by allowing the compiler to make assumptions that are unsafe in an imperative language, thus increasing opportunities for inline expansion. Even if the involved copying that may seem implicit when dealing with persistent immutable data structures might seem computationally costly, some functional programming languages, like Clojure solve this issue by implementing mechanisms for safe memory sharing between formally immutable data. Rust distinguishes itself by its approach to data immutability which involves immutable references and a concept called lifetimes.

Immutable data with separation of identity and state and shared-nothing schemes can also potentially be more well-suited for concurrent and parallel programming by the virtue of reducing or eliminating the risk of certain concurrency hazards, since concurrent operations are usually atomic and this allows eliminating the need for locks. This is how for example java.util.concurrent classes are implemented, where some of them are immutable variants of the corresponding classes that are not suitable for concurrent use. Functional programming languages often have a concurrency model that instead of shared state and synchronization, leverages message passing mechanisms (such as the actor model, where each actor is a container for state, behavior, child actors and a message queue). This approach is common in Erlang/Elixir or Akka.

Lazy evaluation may also speed up the program, even asymptotically, whereas it may slow it down at most by a constant factor (however, it may introduce memory leaks if used improperly). Launchbury 1993 discusses theoretical issues related to memory leaks from lazy evaluation, and O'Sullivan et al. 2008 give some practical advice for analyzing and fixing them. However, the most general implementations of lazy evaluation making extensive use of dereferenced code and data perform poorly on modern processors with deep pipelines and multi-level caches (where a cache miss may cost hundreds of cycles).

Abstraction cost

Some functional programming languages might not optimize abstractions such as higher order functions like "map" or "filter" as efficiently as the underlying imperative operations. Consider, as an example, the following two ways to check if 5 is an even number in Clojure:

(even? 5)
(.equals (mod 5 2) 0)

When benchmarked using the Criterium tool on a Ryzen 7900X GNU/Linux PC in a Leiningen REPL 2.11.2, running on Java VM version 22 and Clojure version 1.11.1, the first implementation, which is implemented as:

(defn even?
  "Returns true if n is even, throws an exception if n is not an integer"
  {:added "1.0"
   :static true}
   [n] (if (integer? n)
        (zero? (bit-and (clojure.lang.RT/uncheckedLongCast n) 1))
        (throw (IllegalArgumentException. (str "Argument must be an integer: " n)))))

has the mean execution time of 4.76 nanoseconds, while the second one, in which .equals is a direct invocation of the underlying Java method, has a mean execution time of 2.8 μs – roughly 1200 times faster. Part of that can be attributed to the type checking and exception handling involved in the implementation of even?, so let's take for instance the lo library for Go, which implements various higher-order functions common in functional programming languages using generics. In a benchmark provided by the library's author, calling map is 4% slower than an equivalent for loop and has the same allocation profile, which can be attributed to various compiler optimizations, such as inlining.

One distinguishing feature of Rust are zero-cost abstractions. This means that using them imposes no additional runtime overhead. This is achieved thanks to the compiler using loop unrolling, where each iteration of a loop, be it imperative or using iterators, is converted into a standalone Assembly instruction, without the overhead of the loop controlling code. If an iterative operation writes to an array, the resulting array's elements will be stored in specific CPU registers, allowing for constant-time access at runtime.

Functional programming in non-functional languages

It is possible to use a functional style of programming in languages that are not traditionally considered functional languages. For example, both D and Fortran 95 explicitly support pure functions.

JavaScript, Lua, Python and Go had first class functions from their inception. Python had support for "lambda", "map", "reduce", and "filter" in 1994, as well as closures in Python 2.2, though Python 3 relegated "reduce" to the functools standard library module. First-class functions have been introduced into other mainstream languages such as PHP 5.3, Visual Basic 9, C# 3.0, C++11, and Kotlin.

In PHP, anonymous classes, closures and lambdas are fully supported. Libraries and language extensions for immutable data structures are being developed to aid programming in the functional style.

In Java, anonymous classes can sometimes be used to simulate closures; however, anonymous classes are not always proper replacements to closures because they have more limited capabilities. Java 8 supports lambda expressions as a replacement for some anonymous classes.

In C#, anonymous classes are not necessary, because closures and lambdas are fully supported. Libraries and language extensions for immutable data structures are being developed to aid programming in the functional style in C#.

Many object-oriented design patterns are expressible in functional programming terms: for example, the strategy pattern simply dictates use of a higher-order function, and the visitor pattern roughly corresponds to a catamorphism, or fold.

Similarly, the idea of immutable data from functional programming is often included in imperative programming languages, for example the tuple in Python, which is an immutable array, and Object.freeze() in JavaScript.

Comparison to logic programming

Logic programming can be viewed as a generalisation of functional programming, in which functions are a special case of relations. For example, the function, mother(X) = Y, (every X has only one mother Y) can be represented by the relation mother(X, Y). Whereas functions have a strict input-output pattern of arguments, relations can be queried with any pattern of inputs and outputs. Consider the following logic program:

mother(charles, elizabeth).
mother(harry, diana).

The program can be queried, like a functional program, to generate mothers from children:

?- mother(harry, X).
X = diana.
?- mother(charles, X).
X = elizabeth.

But it can also be queried backwards, to generate children:

?- mother(X, elizabeth).
X = charles.
?- mother(X, diana).
X = harry.

It can even be used to generate all instances of the mother relation:

?- mother(X, Y).
X = charles,
Y = elizabeth.
X = harry,
Y = diana.

Compared with relational syntax, functional syntax is a more compact notation for nested functions. For example, the definition of maternal grandmother in functional syntax can be written in the nested form:

maternal_grandmother(X) = mother(mother(X)).

The same definition in relational notation needs to be written in the unnested form:

maternal_grandmother(X, Y) :- mother(X, Z), mother(Z, Y).

Here :- means if and , means and.

However, the difference between the two representations is simply syntactic. In Ciao Prolog, relations can be nested, like functions in functional programming:

grandparent(X) := parent(parent(X)).
parent(X) := mother(X).
parent(X) := father(X).

mother(charles) := elizabeth.
father(charles) := phillip.
mother(harry) := diana.
father(harry) := charles.

?- grandparent(X,Y).
X = harry,
Y = elizabeth.
X = harry,
Y = phillip.

Ciao transforms the function-like notation into relational form and executes the resulting logic program using the standard Prolog execution strategy.

Applications

Text editors

Emacs, a highly extensible text editor family uses its own Lisp dialect for writing plugins. The original author of the most popular Emacs implementation, GNU Emacs and Emacs Lisp, Richard Stallman considers Lisp one of his favorite programming languages.

Helix, since version 24.03 supports previewing AST as S-expressions, which are also the core feature of the Lisp programming language family.

Spreadsheets

Spreadsheets can be considered a form of pure, zeroth-order, strict-evaluation functional programming system. However, spreadsheets generally lack higher-order functions as well as code reuse, and in some implementations, also lack recursion. Several extensions have been developed for spreadsheet programs to enable higher-order and reusable functions, but so far remain primarily academic in nature.

Academia

Functional programming is an active area of research in the field of programming language theory. There are several peer-reviewed publication venues focusing on functional programming, including the International Conference on Functional Programming, the Journal of Functional Programming, and the Symposium on Trends in Functional Programming.

Industry

Functional programming has been employed in a wide range of industrial applications. For example, Erlang, which was developed by the Swedish company Ericsson in the late 1980s, was originally used to implement fault-tolerant telecommunications systems, but has since become popular for building a range of applications at companies such as Nortel, Facebook, Électricité de France and WhatsApp. Scheme, a dialect of Lisp, was used as the basis for several applications on early Apple Macintosh computers and has been applied to problems such as training-simulation software and telescope control. OCaml, which was introduced in the mid-1990s, has seen commercial use in areas such as financial analysis, driver verification, industrial robot programming and static analysis of embedded software. Haskell, though initially intended as a research language, has also been applied in areas such as aerospace systems, hardware design and web programming.

Other functional programming languages that have seen use in industry include Scala, F#, Wolfram Language, Lisp, Standard ML and Clojure. Scala has been widely used in Data science, while ClojureScript, Elm or PureScript are some of the functional frontend programming languages used in production. Elixir's Phoenix framework is also used by some relatively popular commercial projects, such as Font Awesome or Allegro (one of the biggest e-commerce platforms in Poland)'s classified ads platform Allegro Lokalnie.

Functional "platforms" have been popular in finance for risk analytics (particularly with large investment banks). Risk factors are coded as functions that form interdependent graphs (categories) to measure correlations in market shifts, similar in manner to Gröbner basis optimizations but also for regulatory frameworks such as Comprehensive Capital Analysis and Review. Given the use of OCaml and Caml variations in finance, these systems are sometimes considered related to a categorical abstract machine. Functional programming is heavily influenced by category theory.

Education

Many universities teach functional programming. Some treat it as an introductory programming concept while others first teach imperative programming methods.

Outside of computer science, functional programming is used to teach problem-solving, algebraic and geometric concepts. It has also been used to teach classical mechanics, as in the book Structure and Interpretation of Classical Mechanics.

In particular, Scheme has been a relatively popular choice for teaching programming for years.

Delayed-choice quantum eraser

From Wikipedia, the free encyclopedia https://en.wikipedia.org/wiki/Delayed-choice_quantum_eraser A delayed-cho...