<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://en.formulasearchengine.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=89.204.0.0%2F16</id>
	<title>formulasearchengine - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://en.formulasearchengine.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=89.204.0.0%2F16"/>
	<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/wiki/Special:Contributions/89.204.0.0/16"/>
	<updated>2026-08-23T13:48:58Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.47.0-wmf.7</generator>
	<entry>
		<id>https://en.formulasearchengine.com/w/index.php?title=Non-linear_least_squares&amp;diff=259894</id>
		<title>Non-linear least squares</title>
		<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/w/index.php?title=Non-linear_least_squares&amp;diff=259894"/>
		<updated>2014-12-17T09:31:33Z</updated>

		<summary type="html">&lt;p&gt;89.204.135.20: /* Marquardt parameter */ added &amp;#039;be&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I&#039;m Imogene and was born on 7 January 1980. My hobbies are People watching and Rugby league football.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Here is my web-site - [http://uzonline.net/profile/135185/miydaz.html wordpress dropbox backup]&lt;/div&gt;</summary>
		<author><name>89.204.135.20</name></author>
	</entry>
	<entry>
		<id>https://en.formulasearchengine.com/w/index.php?title=Relativity_priority_dispute&amp;diff=246653</id>
		<title>Relativity priority dispute</title>
		<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/w/index.php?title=Relativity_priority_dispute&amp;diff=246653"/>
		<updated>2014-03-01T13:32:59Z</updated>

		<summary type="html">&lt;p&gt;89.204.153.161: Reimann -&amp;gt; Riemann&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Greetings! I am Myrtle Shroyer. Body developing is what my family and I appreciate. Bookkeeping is what I do. Minnesota is where he&#039;s been living for many years.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Here is my web page std testing at home ([http://bogangsa.com/board_avHE75/389128 browse around here])&lt;/div&gt;</summary>
		<author><name>89.204.153.161</name></author>
	</entry>
	<entry>
		<id>https://en.formulasearchengine.com/w/index.php?title=Antipope_John_XXIII&amp;diff=272141</id>
		<title>Antipope John XXIII</title>
		<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/w/index.php?title=Antipope_John_XXIII&amp;diff=272141"/>
		<updated>2014-01-30T22:08:35Z</updated>

		<summary type="html">&lt;p&gt;89.204.137.88: Fixed geographical description of flight&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Les investisseurs retrouveront également une source d&#039;information conséquente concernant notamment les fonds. Conseils emploi Emploi Stage trader Guadeloupe Trouvez toutes les offres d&#039;emploi Stage trader Guadeloupe. Un trader doit pouvoir faire la différence entre les sites arnaqueurs qui proposent des gains colossaux et ceux qui offrent de vraies stratégies basées sur des donnés scientifiques des statistiques rationnelles et des analyses de marché. Tom&#039;s Hardware Guide Peut-on encore acheter des actions Google. Le Corvus typé très freeride donc devient difficile sur la piste de chez Black Crows qui vaut le coup ~16409538~80305cf5934b4871a26a5d7442b41699. Ainsi lorsque des institutions financières prêteuses ou de nouveaux fournisseurs d&#039;importance exigent le cautionnement personnel des actionnaires en cas de non-respect des engagements de la compagnie leur responsabilité personnelle est engagée. Ici nous avons la certitude absolue que les animaux dont la viande y est mise en vente ont enduré les plus grandes souffrances de leur premier au dernier souffle. Nous vous proposons des technologies de pointe une large gamme de marchés et des tarifs compétitifs. ACI Airports Council International Site. Et son forum ne sont pas liés Apple et les marques citées sont la propriété de leurs détenteurs respectifs. J&#039;avais placé de l&#039;argent en bourse mais j&#039;ai engraissé tout le monde. Notre forte culture du Forfait 30 % de nos projets nous permet de créer une communauté de consultants d&#039;un excellent niveau technique et qui développent en parallèle des compétences fonctionnelles. Le trading sur un compte démo est une expérience éducative clé et un excellent aperçu sur le monde des marchés de devises. Exporter le Logiciel vers un autre pays que ce soit par des moyens physiques ou électroniques ou. Vous découvrirez votre outil de trading passerez un ordre en argent fictif. L&#039;une des priorités de cette mobilisation se concentrera sur l&#039;économie numérique. Que puis-je faire d&#039;autre pour mettre fin la pauvreté dans le monde. En quelques nano-secondes les actions chutent. Quand un trader fait une opération négative et intègre dans son intérieur qu&#039;il en est seul responsable il a non seulement le courage de cl turer cette position mais surtout il est même d&#039;assumer un autre choix avec moins de mauvaise conscience que s&#039;il persistait jouer l&#039;autruche. Se sont ajoutés la prise en compte sur les marchés -en particulier des changes de la dégradation de la situation des pays émergents périphériques. EUR L&#039;Euro a réalisé des gains en début de séance avant de glisser pour cause d&#039;indicateurs décevants au sein de l&#039;Union Européenne ce qui ranime les inquiétudes autour de l&#039;absence de force de la région. Sauf si ces outils permettent une performance nettement plus élevée tous les mois. Vous propose l&#039;analyse technique du jour pour les principaux cross du marché des changes pour la séance du 03/10/2014. Euros la plateforme est d&#039;une facilité d&#039;utilisation remarquable. plutôt un coup d&#039;épée dans l&#039;eau en somme. Des centaines de LGBT ont participé un cortège musical et coloré cet après-midi. Donc ce qui fait qu&#039;un trader qui a du succès  comment gagner rapidement de l&#039;argent et un autre qui subi l&#039;échec Alors il faut absolument savoir comment devenir un bon trader et cela est facile expliquer. Ils sont représentés par un point bleu ou rouge qu&#039;il s&#039;agisse de quelqu&#039;un qui  comment gagner rapidement de l&#039;argent a besoin de votre aide ou d&#039;une menace qui apparaîtra sur votre carte lorsque vous passez devant. Une telle déclaration a tout pour surprendre de la part d&#039;un poète dont la musicalité charme les lecteurs et les musiciens depuis plus d&#039;un siècle. Ces valeurs moins de 1 euro continuent d&#039;attirer de nombreux épargnants qui comme s&#039;ils jouaient au loto espèrent en tirer le gros lot. L&#039;analyse technique et les patterns sont en effet très cycliques au niveau de leur pertinence et de leur rentabilité. Oui avec la même carte bancaire vous pouvez payer en euros et en devises lorsque vous partez l&#039;étranger. Bonjour et même si ce n&#039;est pas le lieu Bonne fête tous les Amoureux s&#039;il en reste Laissez moi r Ever. Choisissez entre trois méthodes différentes d&#039;allocation. ARC Association de Courtiers en Rachat de CréditARC est la 1e Association française de Courtiers en Banques spécialisés dans le rachat et la restructuration de crédits consommation et immobilier. Retrouvez plus d&#039;informations sur PFX Premium 3 scénarios se sont déclenchés vendredi matin provenant de nos conseils fixes. Comme indiqué précédemment dans notre approche pouvons vérifier dans l&#039;exemple ci-dessus que l&#039;indicateur Stochastique ne générere pas forcément un signal d&#039;achat ou de vente lorsque ces bornes ont été atteintes. Bonheur Découvrez où vos Sims sont heureux et les zones qui requièrent des améliorations pour assurer leur bonheur. Le programme intègre plusieurs générateurs d&#039;indicateurs tels que MACD RSI. D&#039;abord avant toute chose l&#039;investisseur est tenu d&#039;ouvrir un compte sur la plateforme d OptionBit et ensuite de l&#039;alimenter pour pouvoir effectuer des opérations de trade. Si ces méthodes étaient encore d&#039;actualité le nombre de gagnants serait évidement bien supérieur 5%. Importer au Canada €”Destination marchés internationaux. Leur but est par exemple d&#039;exploiter des différences de prix entre des contrats terme sur le S&amp;amp;P500 cotés Chicago et des titres équivalents sur la Bourse de New York. Pour acheter une valeur rien de plus simple il vous suffit de cliquer sur le bouton acheter et de définir le montant que vous souhaitez investir ce montant servira de garantie pour vos achats dans la mesure ou vous aurez automatiquement l&#039;application du système de levier. Pour ces derniers le bug peut provoquer un désastre. On peut notamment trader sur le cours des matières premières des paires de devises des métaux des indices boursiers ou encore sur le mouvement d&#039;action de grandes sociétés cotées en bourse. Le client doit vérifier la teneur de la rubrique services de la banque pour s&#039;enquérir de ceux qui conviennent le mieux sa situation. Gonflez votre CV et votre expérience professionnelle avec un stage typé front office. N&#039;as-t-on pas intérêt quand même garder cet argent pour le faire travailler pendant 9-10 ans. L&#039;objectif général est schématiquement la localisation des charges dans des États dont le niveau  comment gagner rapidement de l&#039;argent d&#039;imposition est élevé et la localisation des profits dans des États dont le niveau d&#039;imposition est faible. Ces portails de Bourse contiennent également des informations supplémentaires pour nous aider prendre les bonnes décisions. Pour vraiment rentabiliser le trading mobile il est important que votre mobile ait assez de mémoire disponible pour remplir les t ¢ches fixées. JCT Ma formation initiale sciences humaines et informatique a sans doute évité les excès des 4 défauts cités et pour ma part le plus difficile a été l&#039;humilité. Les articles 252 255 et 256 s&#039;appliquent compte tenu des adaptations nécessaires la présente section. La date d&#039;activation des nouvelles extensions dépend du processus de candidature et de validation fixé par l&#039;ICANN. Parmi les plus connus vous trouverez les CFD sur l&#039;ETF iShares Brazil Index l&#039;ETF Diamonds Trust calqué sur le Dow Jones et l&#039;ETF Vanguard SmallCap. Créez une solution de transport globale adaptée votre entreprise. L&#039;évolution des marchés américains se suit aussi de la meilleure façon par les Futures mini S&amp;amp;P mini Nasdaq mini CrudeOil mini Dow etc. Choisissez vos 20 chaînes préférées en plus de la Base HD qui est incluse. Ensuite dans la fen être €˜observation du marché&#039; faire un clic droit et choisir €˜Montrer tout&#039;. Pourquoi rejoindre le Championnat des Devises. Une fois que vous avez déterminé votre stratégie de gain vous devrez gérer vos gains afin de préserver au maximum votre capital et de minimiser le risque. Oui moi aussi il ma ete recommande sur des forums je suis desormais sur que ca vient de lui ou de son equipe et je l&#039;ai contacte pour de largent que j&#039;ai perdu chez Bforex a l&#039;epoque. Sur les 193 dépôts de plaintes en 2008 166 ont été réglés dans les neuf mois mais seulement 23% ont reçu les fonds perdus. Rappelons que l&#039;avis du CE est purement consultatif et ne modifie pas les forces en présence dans la bataille qui oppose l&#039;homme d&#039;affaires italien Andrea Bonomi Fosun. Notre avis est totalement indépendant des brokers et nous ne touchons aucune commission sur ce classement. Lorsque plusieurs personnes exploitent ensemble une entreprise il s&#039;agit d&#039;une société de personnes. J&#039;ai déjà raconté ma mésaventure sur ce site. En réaction les bourses américaines chutent de 2%. CMS Demandware ExactTarget Site Studio Prestashop Wordpress Carrefour Trader. Le 22/09/2014 didier belier15_arobase_sfr_point_fr. Persévérez recliquez et oufffffff au troisième essai en principe vous voyez apparaître une fen être aperçu qui vous permet de corriger. Oui mais tout ces conseils judicieux vous les trouverez dans les articles de mes confrères traders et blogueurs dont voici la liste. L&#039;opérateur Forex doit être conscient de cela et reconnaître les conditions de marché qui ont mené ce rapport. Vous serez exonérés d&#039;impôt sur le revenu et vous avez payer les 12 3% correspondant aux prélèvements sociaux. Trouver une stratégie simple pour un marché en range. Donc un lent étiolement dans la mesure où les banquiers ont fait correctement leur métier c&#039;est -dire qu&#039;ils ont vérifié quand même que les ménages étaient solvables et donc les prix se font quand même la marge. Domaine d&#039;expertise BI pilotage financier pilotage de la performance et pilotage des risques Conseil Définition de la stratégie Schémas Directeurs Cahier des Charges Réingénierie des processus Définition d&#039;Indicateurs Spécifications Fonctionnelles Générales direction de projets. Le travail continue sur les schemata restants en particulier ceux sur la place de l église dans le monde moderne et la liberté religieuse. Astuce Le succès en lui-m Eme n&#039;est pas du mais se revele être trés trés long si vous souhaitez vous concentrer dessus. Ordres seuil de déclenchement et ordres au marché américains. Tous ces éléments montrent des dissensions dans la zone euro. On ne verra aucune  comment gagner rapidement de l&#039;argent différence d&#039;aspect ni de poids. Il ma reclame 600euro que jetais reticent a payer compte tenu de mes pertes precedentes chez Bforex tout en disant que cetait son metier et garanti et en me montrant les soit disant temoignages sur son site de clients satisfaits. A chaque journée supplémentaire il faut s&#039;acquitter d&#039;intérêts. Nous sommes donc conditionnés la base pour prendre un type de décision. évidemment cela peut être risqué car vous pouvez perdre de l&#039;argent aussi. Le courtier vous permettra ainsi de négocier les principales actions un grand nombre de matières premières des actions les principales paires de devises et une impressionnante liste d&#039;indices. Obtenez gratuitement le guide PDF PLUS du forex. Et ne parlons pas de l&#039;accès l&#039;abstraction au symbole l&#039;image. Mais je pense sincèrement que l&#039;on peut vivre du day trading. Le négociateur achète une position mixte par l&#039;achat de cinq contrats terme SXF et la vente simultanée de douze contrats terme SCF. Toutefois le key in sketch métro city deux et la sociétés de Roma Italie N 05649781001 lheure de pointe partent vers boucle permettant de joindre Court CriteriaExclusion Criteria Move back to. Délais de paiement contractuels des disparités logiques entre secteur réglementés et les autres. It Gianluigi Balsebre Della critica radicale. Tenez également un journal et notez y la fois vos bonnes transactions mais aussi et surtout vos échecs car cela vous permettra de savoir quels sont vos axes d&#039;amélioration. Mais j&#039;ai regardé aussi du 5min M5 sur Metatrader sur le Forex et il existe de belles opportunités de trades en ce moment pour les scalpeurs. On peut faire une critique du féminisme mais celle qui consiste dire que c&#039;était bien mieux avant parraît un peu courte. Un nouveau module sensationnel appelé LiveStatistics a été ajouté la plateforme WHS FutureStation. Carrefour est le n 1 européen et le n 2 mondial de la grande distribution. Ce qui ferait perdre évidemment le gain maximum possible cause de la commission payer pour l&#039;utilisation de cet outil. Cependant comme j&#039;ai grandi j&#039;ai commence a voir le point et comment gagner des sous sur internet est connu par beaucoup. Aucun ouvrier en Chine n&#039;est payé l&#039;heure la pièce ou au boni. Le nom Coca-Cola est une marque commerciale américaine déposée en 1886 et fabriquée depuis par la Coca-Cola Company. C&#039;est notamment le cas de société de sourcing et société de trading que l&#039;on a trop souvent tendance considérer comme synonymes alors que leurs sens certes proches réfèrent bel et bien deux systèmes différents. Il n&#039;y a pas de voie royale € qui débouche de manière garantie sur un métier de trading commo. Atrium European Real Estate est spécialisé dans le développement et la gestion de centres commerciaux. Pourquoi est il question de mettre en place des processus de régulation afin d&#039;éviter précisément des dérives dans le secteur de la finance. Les comptes démos sont des comptes de démonstration. Le monde de l&#039;entreprise inconnu pour vous. Le compte dépend du premier dépôt qui va ensuite impacter toute la carrière du trader chez le courtier pensez-y bien avant de faire un premier dépôt Par la suite vous pouvez grappiller les échelons gr ¢ce aux volumes que vous avez traités qui se comptent en termes de lot. Une fois que vous avez trouvé une option qui correspond au critère investissez dans cette option immédiatement. Ce problème peut être facilement résolu en changeant une simple option dans les options d&#039;Entrée d&#039;un EA. Certains d&#039;entre eux ont été blessés lors de ces manifestations d&#039;autres menacés et plusieurs sont actuellement en procès contre l église de scientologie. Les courtiers traditionnels vous offrent supposément des conseils d&#039;expert et peuvent gérer votre compte mais ils demandent des frais substantiels. Spéculation opération d&#039;achat puis de vente de titres dans l&#039;objectif d&#039;en tirer un bénéfice gr ¢ce la variation de leurs cours. Déclaration CNIL n 1597225 v 0 Société MARKS &amp;amp; SPENCER GRP. Ils font régner une ambiance favorable au travail et l&#039;épanouissement de chacun. Sur la fesse droite c&#039;est marqué Il y a d&#039;autres moyens pour faire carrière. C&#039;est le centre de la régulation libérale. Il vaut mieux prendre une grosse position couverte qu&#039;une petite position non couverte. C&#039;est donc plutôt quand la productivité horaire  comment gagner rapidement de l&#039;argent du travail baisse que le dollar serait logiquement poussé la hausse puisque les salaires pourraient parallèlement augmenter ce qui reste démontrer ou plutôt vérifier les dépenses de consommation et l&#039;ensemble de l&#039;activité économique américaine s&#039;en trouvant tirés vers le haut. Nous nous attaquons desormais au probleme de lenteur. Votre taux d&#039;intérêt relatif un CFD sur une position ouverte sera reporté. Le crédit obtenu en  comment gagner rapidement de l&#039;argent 2013 était garanti par diverses. Une connaissance approfondie de la bourse mais également de l&#039;économie est exigée. Répondre aux interrogations des salariés pour qu&#039;ils gèrent leurs compétences et organisent leurs parcours professionnels offrir aux entreprises des  comment gagner rapidement de l&#039;argent descriptifs d&#039;activités et de profils type pour les aider dans leurs recrutements et la gestion des ressources humaines accompagner les partenaires sociaux dans la structuration d&#039;une politique de branche en particulier sur les axes de formation prioritaires ou encore permettre aux écoles et organismes de formation d&#039;enrichir leurs cursus par une meilleur connaissance des métiers et des compétences requises. Le Centre fournit des renseignements généraux sur toutes sortes de sujets liés la propriété intellectuelle y compris la procédure suivre pour faire enregistrer une marque de commerce. Développé par phpBBî Forum Software é phpBB Group. Ceci est particulièrement recommandé si vous changez de catégorie de véhicule en passant par exemple d&#039;une petite voiture un VUS.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Feel free to surf to my web page: [http://www.gagnerdelargent.tv/ comment gagner rapidement de l&#039;argent]&lt;/div&gt;</summary>
		<author><name>89.204.137.88</name></author>
	</entry>
	<entry>
		<id>https://en.formulasearchengine.com/w/index.php?title=Bogosort&amp;diff=2184</id>
		<title>Bogosort</title>
		<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/w/index.php?title=Bogosort&amp;diff=2184"/>
		<updated>2014-01-24T04:00:33Z</updated>

		<summary type="html">&lt;p&gt;89.204.135.221: +Category:Computer humor&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox programming language&lt;br /&gt;
|name = Standard ML&lt;br /&gt;
|logo =&lt;br /&gt;
|paradigm = [[multi-paradigm programming language|multi-paradigm]]: [[functional programming language|functional]], [[imperative programming|imperative]]&lt;br /&gt;
|year =&lt;br /&gt;
|designer =&lt;br /&gt;
|typing = [[strong typing|strong]], [[static typing|static]], [[type inference|inferred]]&lt;br /&gt;
|implementations = [[MLKit]], [[MLton]], [[MLWorks]], [[Moscow ML]], [[Poly/ML]], [[Standard ML of New Jersey|SML/NJ]], [[MLj]], [[SML.NET]]&lt;br /&gt;
|dialects = [[Alice (programming language)|Alice]], [[Dependent ML]]&lt;br /&gt;
|influenced_by = [[ML programming language|ML]], [[Hope (programming language)|Hope]]&lt;br /&gt;
|influenced = [[Rust (programming language)|Rust]]&lt;br /&gt;
|file_ext = .sml&lt;br /&gt;
|website =&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Standard ML&#039;&#039;&#039; (&#039;&#039;&#039;SML&#039;&#039;&#039;) is a general-purpose, [[Module (programming)|modular]], [[functional programming language]] with [[compile-time type checking]] and [[type inference]]. It is popular among [[compiler]] writers and [[programming language research]]ers, as well as in the development of [[automated theorem proving|theorem provers]].&lt;br /&gt;
&lt;br /&gt;
SML is a modern descendant of the [[ML programming language]] used in the [[Logic for Computable Functions]] (LCF) theorem-proving project. It is distinctive among widely used languages in that it has a formal specification, given as [[type rules|typing rules]] and [[operational semantics]] in &#039;&#039;The Definition of Standard ML&#039;&#039; (1990, revised and simplified as &#039;&#039;The Definition of Standard ML (Revised)&#039;&#039; in 1997).&amp;lt;ref&amp;gt;{{cite book&lt;br /&gt;
   | last = Milner&lt;br /&gt;
   | first = R.&lt;br /&gt;
   | authorlink = Robin Milner&lt;br /&gt;
   | coauthors = [[Mads Tofte|M. Tofte]], [[Robert Harper (computer scientist)|R. Harper]] and D. MacQueen.&lt;br /&gt;
   | title = The Definition of Standard ML (Revised)&lt;br /&gt;
   | publisher = MIT Press&lt;br /&gt;
   | year = 1997&lt;br /&gt;
   | isbn = 0-262-63181-4 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Language==&lt;br /&gt;
Standard ML is a functional programming language with some impure features. Programs written in Standard ML consist of [[expression (programming)|expression]]s to be evaluated, as opposed to statements or commands, although some expressions return a trivial &amp;quot;unit&amp;quot; value and are only evaluated for their side-effects.&lt;br /&gt;
&lt;br /&gt;
Like all functional programming languages, a key feature of Standard ML is the [[function (programming)|function]], which is used for abstraction. For instance, the [[factorial]] function can be expressed as:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;fun&#039;&#039;&#039; factorial n = &lt;br /&gt;
        &#039;&#039;&#039;if&#039;&#039;&#039; n = 0 &#039;&#039;&#039;then&#039;&#039;&#039; 1 &#039;&#039;&#039;else&#039;&#039;&#039; n * factorial (n-1)&lt;br /&gt;
&lt;br /&gt;
A Standard ML compiler is required to infer the static type &amp;lt;tt&amp;gt;int -&amp;gt; int &amp;lt;/tt&amp;gt;of this function without user-supplied type annotations. I.e., it has to deduce that &#039;&#039;n&#039;&#039; is only used with integer expressions, and must therefore itself be an integer, and that all value-producing expressions within the function return integers.&lt;br /&gt;
&lt;br /&gt;
The same function can be expressed with [[clausal function definitions]] where the &#039;&#039;if&#039;&#039;-&#039;&#039;then&#039;&#039;-&#039;&#039;else&#039;&#039; conditional is replaced by a sequence of templates of the factorial function evaluated for specific values, separated by &#039;|&#039;, which are tried one by one in the order written until a match is found:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;fun&#039;&#039;&#039; factorial 0 = 1&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;  |&amp;lt;/nowiki&amp;gt; factorial n = n * factorial (n - 1)&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This can be rewritten using a case statement like this:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;val&#039;&#039;&#039; &#039;&#039;&#039;rec&#039;&#039;&#039; factorial =&lt;br /&gt;
        &#039;&#039;&#039;fn&#039;&#039;&#039; n =&amp;gt; &#039;&#039;&#039;case&#039;&#039;&#039; n &#039;&#039;&#039;of&#039;&#039;&#039; 0 =&amp;gt; 1&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;                       |&amp;lt;/nowiki&amp;gt; n =&amp;gt; n * factorial (n - 1)&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or as a lambda function:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;val&#039;&#039;&#039; &#039;&#039;&#039;rec&#039;&#039;&#039; factorial = &#039;&#039;&#039;fn&#039;&#039;&#039; 0 =&amp;gt; 1 | n =&amp;gt; n * factorial(n -1)&lt;br /&gt;
&lt;br /&gt;
Here, the keyword &amp;lt;code&amp;gt;val&amp;lt;/code&amp;gt; introduces a binding of an identifier to a value, &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; introduces the definition of an [[anonymous function]], and &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt; introduces a sequence of patterns and corresponding expressions.&lt;br /&gt;
&lt;br /&gt;
Using a local function, this function can be rewritten in a more efficient [[tail recursive]] style.&lt;br /&gt;
 &#039;&#039;&#039;fun&#039;&#039;&#039; factorial n = &#039;&#039;&#039;let&#039;&#039;&#039;&lt;br /&gt;
       &#039;&#039;&#039;fun&#039;&#039;&#039; lp (0, acc) = acc&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;       |&amp;lt;/nowiki&amp;gt; lp (m, acc) = lp (m-1, m*acc)&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;in&#039;&#039;&#039;&lt;br /&gt;
        lp (n, 1)&lt;br /&gt;
      &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
(The value of a &#039;&#039;&#039;let&#039;&#039;&#039;-expression is that of the expression between &#039;&#039;&#039;in&#039;&#039;&#039; and &#039;&#039;&#039;end&#039;&#039;&#039;.) The encapsulation of an invariant-preserving tail-recursive tight loop with one or more accumulator parameters inside an invariant-free outer function, as seen here, is a common idiom in Standard ML, and appears with great frequency in SML code.&lt;br /&gt;
&lt;br /&gt;
===Type synonyms===&lt;br /&gt;
&lt;br /&gt;
A type synonym is defined with the &#039;&#039;&#039;type&#039;&#039;&#039; keyword. Here is a type synonym for points in the plane, and functions computing the distances between two points, and the area of a triangle with the given corners as per [[Heron&#039;s formula]].&lt;br /&gt;
 &#039;&#039;&#039;type&#039;&#039;&#039; loc = real * real&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;fun&#039;&#039;&#039; dist ((x0, y0), (x1, y1)) = &#039;&#039;&#039;let&#039;&#039;&#039;&lt;br /&gt;
      &#039;&#039;&#039;val&#039;&#039;&#039; dx = x1 - x0&lt;br /&gt;
      &#039;&#039;&#039;val&#039;&#039;&#039; dy = y1 - y0&lt;br /&gt;
      &#039;&#039;&#039;in&#039;&#039;&#039;&lt;br /&gt;
        Math.sqrt (dx * dx + dy * dy)&lt;br /&gt;
      &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;fun&#039;&#039;&#039; heron (a, b, c) = &#039;&#039;&#039;let&#039;&#039;&#039;&lt;br /&gt;
      &#039;&#039;&#039;val&#039;&#039;&#039; ab = dist (a, b)&lt;br /&gt;
      &#039;&#039;&#039;val&#039;&#039;&#039; bc = dist (b, c)&lt;br /&gt;
      &#039;&#039;&#039;val&#039;&#039;&#039; ac = dist (a, c)&lt;br /&gt;
      &#039;&#039;&#039;val&#039;&#039;&#039; perim = ab + bc + ac&lt;br /&gt;
      &#039;&#039;&#039;val&#039;&#039;&#039; s = perim / 2.0&lt;br /&gt;
      &#039;&#039;&#039;in&#039;&#039;&#039;&lt;br /&gt;
        Math.sqrt (s * (s - ab) * (s - bc) * (s - ac))&lt;br /&gt;
      &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Algebraic datatypes and pattern matching===&lt;br /&gt;
&lt;br /&gt;
Standard ML provides strong support for [[algebraic datatypes]]. An ML datatype can be thought of as a [[disjoint union]]. They are easy to define and easy to program with, in large part because of Standard ML&#039;s [[pattern matching]] as well as most Standard ML implementations&#039; pattern exhaustiveness checking and pattern redundancy checking.&lt;br /&gt;
&lt;br /&gt;
A datatype is defined with the &#039;&#039;&#039;datatype&#039;&#039;&#039; keyword, as in&lt;br /&gt;
 &#039;&#039;&#039;datatype&#039;&#039;&#039; shape&lt;br /&gt;
    = Circle   &#039;&#039;&#039;of&#039;&#039;&#039; loc * real      (* center and radius *)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;   | Square   &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;of&#039;&#039;&#039; loc * real      (* upper-left corner and side length; axis-aligned *)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;   | Triangle &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;of&#039;&#039;&#039; loc * loc * loc (* corners *)&lt;br /&gt;
(See above for the definition of &amp;lt;tt&amp;gt;loc&amp;lt;/tt&amp;gt;.) Note: datatypes, not type synonyms, are necessary to define recursive constructors. (This is not at issue in the present example.)&lt;br /&gt;
&lt;br /&gt;
Order matters in pattern matching; patterns that are textually first are tried first. Pattern matching can be syntactically embedded in function definitions as follows:&lt;br /&gt;
 &#039;&#039;&#039;fun&#039;&#039;&#039; area (Circle (_, r)) = 3.14 * r * r&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;   |&amp;lt;/nowiki&amp;gt; area (Square (_, s)) = s * s&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;   |&amp;lt;/nowiki&amp;gt; area (Triangle (a, b, c)) = heron (a, b, c) (* see above *)&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Note that subcomponents whose values are not needed in a particular computation are ellided with underscores, or so-called wildcard patterns.&lt;br /&gt;
&lt;br /&gt;
The so-called &amp;quot;clausal form&amp;quot; style function definition, where patterns appear immediately after the function name, is merely [[syntactic sugar]] for&lt;br /&gt;
 &#039;&#039;&#039;fun&#039;&#039;&#039; area shape =&lt;br /&gt;
    &#039;&#039;&#039;case&#039;&#039;&#039; shape&lt;br /&gt;
     &#039;&#039;&#039;of&#039;&#039;&#039; Circle (_, r) =&amp;gt; 3.14 * r * r&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;     |&amp;lt;/nowiki&amp;gt; Square (_, s) =&amp;gt; s * s&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;     |&amp;lt;/nowiki&amp;gt; Triangle (a, b, c) =&amp;gt; heron (a, b, c)&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pattern exhaustiveness checking will make sure each case of the datatype has been accounted for, and will produce a warning if not. The following pattern is inexhaustive:&lt;br /&gt;
 &#039;&#039;&#039;fun&#039;&#039;&#039; center (Circle (c, _)) = c&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;   |&amp;lt;/nowiki&amp;gt; center (Square ((x, y), s)) = (x + s / 2.0, y + s / 2.0)&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
There is no pattern for the &amp;lt;tt&amp;gt;Triangle&amp;lt;/tt&amp;gt; case in the &amp;lt;tt&amp;gt;center&amp;lt;/tt&amp;gt; function. The compiler will issue a warning that the pattern is inexhaustive, and if, at runtime, a &amp;lt;tt&amp;gt;Triangle&amp;lt;/tt&amp;gt; is passed to this function, the exception &amp;lt;tt&amp;gt;Match&amp;lt;/tt&amp;gt; will be raised.&lt;br /&gt;
&lt;br /&gt;
The set of clauses in the following function definition is exhaustive and not redundant:&lt;br /&gt;
 &#039;&#039;&#039;fun&#039;&#039;&#039; hasCorners (Circle _) = false&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;   |&amp;lt;/nowiki&amp;gt; hasCorners _ = true&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
If control gets past the first pattern (the &amp;lt;tt&amp;gt;Circle&amp;lt;/tt&amp;gt;), we know the value must be either a &amp;lt;tt&amp;gt;Square&amp;lt;/tt&amp;gt; or a &amp;lt;tt&amp;gt;Triangle&amp;lt;/tt&amp;gt;. In either of those cases, we know the shape has corners, so we can return &amp;lt;tt&amp;gt;true&amp;lt;/tt&amp;gt; without discriminating which case we are in.&lt;br /&gt;
&lt;br /&gt;
The pattern in second clause the following (meaningless) function is redundant:&lt;br /&gt;
 &#039;&#039;&#039;fun&#039;&#039;&#039; f (Circle ((x, y), r)) = x+y&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;   |&amp;lt;/nowiki&amp;gt; f (Circle _) = 1.0&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;   | f _ = 0.0&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Any value that matches the pattern in the second clause will also match the pattern in the first clause, so the second clause is unreachable. Therefore this definition as a whole exhibits redundancy, and causes a compile-time warning.&lt;br /&gt;
&lt;br /&gt;
C programmers will often use [[tagged union]]s, dispatching on tag values, to accomplish what ML accomplishes with datatypes and pattern matching. Nevertheless, while a C program decorated with appropriate checks will be in a sense as robust as the corresponding ML program, those checks will of necessity be dynamic; ML provides a set of static checks that give the programmer a high degree of confidence in the correctness of the program at compile time.&lt;br /&gt;
&lt;br /&gt;
Note that in object-oriented programming languages, such as Java, a disjoint union can be expressed by designing [[class hierarchies]]. However, as opposed to class hierarchies, ADTs are [[Closed world assumption|closed]]. This makes ADT extensible in a way that is orthogonal to the extensibility of class hierarchies. Class hierarchies can be extended with new subclasses but no new methods, while ADTs can be extended to provide new behavior for all existing constructors, but do not allow defining new constructors.&lt;br /&gt;
&lt;br /&gt;
===Higher-order functions===&lt;br /&gt;
&lt;br /&gt;
Functions can consume functions as arguments:&lt;br /&gt;
 &#039;&#039;&#039;fun&#039;&#039;&#039; applyToBoth f x y = (f x, f y)&lt;br /&gt;
&lt;br /&gt;
Functions can produce functions as return values:&lt;br /&gt;
 &#039;&#039;&#039;fun&#039;&#039;&#039; constantFn k = &#039;&#039;&#039;let&#039;&#039;&#039;&lt;br /&gt;
     &#039;&#039;&#039;fun&#039;&#039;&#039; const anything = k&lt;br /&gt;
    &#039;&#039;&#039;in&#039;&#039;&#039;&lt;br /&gt;
      const&lt;br /&gt;
    &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
(alternatively)&lt;br /&gt;
 &#039;&#039;&#039;fun&#039;&#039;&#039; constantFn k = (&#039;&#039;&#039;fn&#039;&#039;&#039; anything =&amp;gt; k)&lt;br /&gt;
&lt;br /&gt;
Functions can also both consume and produce functions:&lt;br /&gt;
 &#039;&#039;&#039;fun&#039;&#039;&#039; compose (f, g) = &#039;&#039;&#039;let&#039;&#039;&#039;&lt;br /&gt;
     &#039;&#039;&#039;fun&#039;&#039;&#039; h x = f (g x)&lt;br /&gt;
    &#039;&#039;&#039;in&#039;&#039;&#039;&lt;br /&gt;
      h&lt;br /&gt;
    &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
(alternatively)&lt;br /&gt;
 &#039;&#039;&#039;fun&#039;&#039;&#039; compose (f, g) = (&#039;&#039;&#039;fn&#039;&#039;&#039; x =&amp;gt; f (g x))&lt;br /&gt;
&lt;br /&gt;
The function &amp;lt;code&amp;gt;List.map&amp;lt;/code&amp;gt; from the basis library is one of the most commonly used higher-order functions in Standard ML:&lt;br /&gt;
 &#039;&#039;&#039;fun&#039;&#039;&#039; map _ [] = []&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;   |&amp;lt;/nowiki&amp;gt; map f (x::xs) = f x&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;  :: map f xs&lt;br /&gt;
(A more efficient implementation of &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt; would define a tail-recursive inner loop as follows:)&lt;br /&gt;
 &#039;&#039;&#039;fun&#039;&#039;&#039; map f xs = &#039;&#039;&#039;let&#039;&#039;&#039;&lt;br /&gt;
     &#039;&#039;&#039;fun&#039;&#039;&#039; m ([], acc) = List.rev acc&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;     |&amp;lt;/nowiki&amp;gt; m (x::xs, acc) = m (xs, f x&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;  :: acc)&lt;br /&gt;
    &#039;&#039;&#039;in&#039;&#039;&#039;&lt;br /&gt;
      m (xs, [])&lt;br /&gt;
    &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Exceptions===&lt;br /&gt;
&lt;br /&gt;
Exceptions are raised with the &amp;lt;code&amp;gt;raise&amp;lt;/code&amp;gt; keyword, and handled with pattern matching &amp;lt;code&amp;gt;handle&amp;lt;/code&amp;gt; constructs.&lt;br /&gt;
 &#039;&#039;&#039;exception&#039;&#039;&#039; Undefined&lt;br /&gt;
  &#039;&#039;&#039;fun&#039;&#039;&#039; max [x] = x&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;   |&amp;lt;/nowiki&amp;gt; max (x::xs) = &amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;let&#039;&#039;&#039; &#039;&#039;&#039;val&#039;&#039;&#039; m = max xs &#039;&#039;&#039;in&#039;&#039;&#039; &#039;&#039;&#039;if&#039;&#039;&#039; x &amp;gt; m &#039;&#039;&#039;then&#039;&#039;&#039; x &#039;&#039;&#039;else&#039;&#039;&#039; m &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
    | max [] = &#039;&#039;&#039;raise&#039;&#039;&#039; Undefined&lt;br /&gt;
  &#039;&#039;&#039;fun&#039;&#039;&#039; main xs = &#039;&#039;&#039;let&#039;&#039;&#039;&lt;br /&gt;
     &#039;&#039;&#039;val&#039;&#039;&#039; msg = (Int.toString (max xs)) &#039;&#039;&#039;handle&#039;&#039;&#039; Undefined =&amp;gt; &amp;quot;empty list...there is no max!&amp;quot;&lt;br /&gt;
    &#039;&#039;&#039;in&#039;&#039;&#039;&lt;br /&gt;
      print (msg ^ &amp;quot;\n&amp;quot;)&lt;br /&gt;
    &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The exception system can be exploited to implement [[non-local exit]], an optimization technique suitable for functions like the following.&lt;br /&gt;
 &#039;&#039;&#039;exception&#039;&#039;&#039; Zero&lt;br /&gt;
  &#039;&#039;&#039;fun&#039;&#039;&#039; listProd ns = &#039;&#039;&#039;let&#039;&#039;&#039;&lt;br /&gt;
     &#039;&#039;&#039;fun&#039;&#039;&#039; p [] = 1&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;     | p (0::_) = &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;raise&#039;&#039;&#039; Zero&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;     |&amp;lt;/nowiki&amp;gt; p (h::t) = h * p t&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    &#039;&#039;&#039;in&#039;&#039;&#039;&lt;br /&gt;
      (p ns) &#039;&#039;&#039;handle&#039;&#039;&#039; Zero =&amp;gt; 0&lt;br /&gt;
    &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
When the exception &amp;lt;code&amp;gt;Zero&amp;lt;/code&amp;gt; is raised in the 0 case, control leaves the function &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; altogether. Consider the alternative: the value 0 would be returned to the most recent awaiting frame, it would be multiplied by the local value of &amp;lt;code&amp;gt;h&amp;lt;/code&amp;gt;, the resulting value (inevitably 0) would be returned in turn to the next awaiting frame, and so on. The raising of the exception allows control to leapfrog directly over the entire chain of frames and avoid the associated computation. It has to be noted that the same optimization could have been obtained by using a tail recursion for this example.&lt;br /&gt;
&lt;br /&gt;
===Module system===&lt;br /&gt;
&lt;br /&gt;
Standard ML has an advanced [[Module (programming)|module]] system, allowing programs to be decomposed into hierarchically organized &#039;&#039;structures&#039;&#039; of logically related type and value declarations.  SML modules provide not only [[namespace]] control but also abstraction, in the sense that they allow programmers to define [[abstract data type]]s.&lt;br /&gt;
&lt;br /&gt;
Three main syntactic constructs comprise the SML module system: signatures, structures and functors.  A &#039;&#039;structure&#039;&#039; is a module; it consists of a collection of types, exceptions, values and structures (called &#039;&#039;substructures&#039;&#039;) packaged together into a logical unit.  A &#039;&#039;signature&#039;&#039; is an [[Interface (computer science)|interface]], usually thought of as a type for a structure: it specifies the names of all the entities provided by the structure as well as the [[arity|arities]] of type components, the types of value components, and signatures for substructures.  The definitions of type components may or may not be exported; type components whose definitions are hidden are &#039;&#039;abstract types&#039;&#039;.  Finally, a &#039;&#039;functor&#039;&#039; is a function from structures to structures; that is, a functor accepts one or more arguments, which are usually structures of a given signature, and produces a structure as its result.  Functors are used to implement [[generic programming|generic]] data structures and algorithms.&lt;br /&gt;
&lt;br /&gt;
For example, the signature for a [[Queue (data structure)|queue]] data structure might be:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;signature&#039;&#039;&#039; QUEUE = &lt;br /&gt;
 &#039;&#039;&#039;sig&#039;&#039;&#039;&lt;br /&gt;
    &#039;&#039;&#039;type&#039;&#039;&#039; &#039;a queue&lt;br /&gt;
    &#039;&#039;&#039;exception&#039;&#039;&#039; Queue&lt;br /&gt;
    &#039;&#039;&#039;val&#039;&#039;&#039; empty     : &#039;a queue&lt;br /&gt;
    &#039;&#039;&#039;val&#039;&#039;&#039; isEmpty   : &#039;a queue -&amp;gt; bool&lt;br /&gt;
    &#039;&#039;&#039;val&#039;&#039;&#039; singleton : &#039;a -&amp;gt; &#039;a queue&lt;br /&gt;
    &#039;&#039;&#039;val&#039;&#039;&#039; insert    : &#039;a * &#039;a queue -&amp;gt; &#039;a queue&lt;br /&gt;
    &#039;&#039;&#039;val&#039;&#039;&#039; peek      : &#039;a queue -&amp;gt; &#039;a&lt;br /&gt;
    &#039;&#039;&#039;val&#039;&#039;&#039; remove    : &#039;a queue -&amp;gt; &#039;a * &#039;a queue&lt;br /&gt;
 &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This signature describes a module that provides a parameterized type &amp;lt;code&amp;gt;queue&amp;lt;/code&amp;gt; of queues, an exception called &amp;lt;code&amp;gt;Queue&amp;lt;/code&amp;gt;, and six values (five of which are functions) providing the basic operations on queues.  One can now implement the queue data structure by writing a structure with this signature:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;structure&#039;&#039;&#039; TwoListQueue    :&amp;gt; QUEUE = &lt;br /&gt;
 &#039;&#039;&#039;struct&#039;&#039;&#039;&lt;br /&gt;
       &#039;&#039;&#039;type&#039;&#039;&#039; &#039;a queue = &#039;a list * &#039;a list&lt;br /&gt;
   &#039;&#039;&#039;exception&#039;&#039;&#039; Queue&lt;br /&gt;
 &lt;br /&gt;
   &#039;&#039;&#039;val&#039;&#039;&#039; empty = ([],[])&lt;br /&gt;
 &lt;br /&gt;
   &#039;&#039;&#039;fun&#039;&#039;&#039; isEmpty ([],[]) = true&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;    |&amp;lt;/nowiki&amp;gt; isEmpty _ = false&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
      &#039;&#039;&#039;fun&#039;&#039;&#039; singleton a = ([], [a])&lt;br /&gt;
 &lt;br /&gt;
   &#039;&#039;&#039;fun&#039;&#039;&#039; insert (a, ([], [])) = ([], [a])&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;    |&amp;lt;/nowiki&amp;gt; insert (a, (ins, outs)) = (a::ins, outs)&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
      &#039;&#039;&#039;fun&#039;&#039;&#039; peek (_,[]) = &#039;&#039;&#039;raise&#039;&#039;&#039; Queue&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;    |&amp;lt;/nowiki&amp;gt; peek (ins, a::outs) = a&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
      &#039;&#039;&#039;fun&#039;&#039;&#039; remove (_,[]) = &#039;&#039;&#039;raise&#039;&#039;&#039; Queue&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;    |&amp;lt;/nowiki&amp;gt; remove (ins, [a]) = (a, ([], rev ins))&amp;lt;nowiki&amp;gt;&lt;br /&gt;
     |&amp;lt;/nowiki&amp;gt; remove (ins, a::outs) = (a, (ins,outs))&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This definition declares that &amp;lt;code&amp;gt;TwoListQueue&amp;lt;/code&amp;gt; is an implementation of the &amp;lt;code&amp;gt;QUEUE&amp;lt;/code&amp;gt; signature.  Furthermore, the &#039;&#039;opaque ascription&#039;&#039; (denoted by &amp;lt;code&amp;gt;:&amp;gt;&amp;lt;/code&amp;gt;) states that any type components whose definitions are not provided in the signature (&#039;&#039;i.e.,&#039;&#039; &amp;lt;code&amp;gt;queue&amp;lt;/code&amp;gt;) should be treated as abstract, meaning that the definition of a queue as a pair of lists is not visible outside the module.  The body of the structure provides bindings for all of the components listed in the signature.&lt;br /&gt;
&lt;br /&gt;
To use a structure, one can access its type and value members using &amp;quot;dot notation&amp;quot;.  For instance, a queue of strings would have type &amp;lt;code&amp;gt;string TwoListQueue.queue&amp;lt;/code&amp;gt;, the empty queue is &amp;lt;code&amp;gt;TwoListQueue.empty&amp;lt;/code&amp;gt;, and to remove the first element from a queue called &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt; one would write &amp;lt;code&amp;gt;TwoListQueue.remove q&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
One popular algorithm&amp;lt;ref&amp;gt;{{cite conference&lt;br /&gt;
   | last = Okasaki&lt;br /&gt;
   | first = Chris&lt;br /&gt;
   | title = Breadth-First Numbering: Lessons from a Small Exercise in Algorithm Design&lt;br /&gt;
   | booktitle = International Conference on Functional Programming 2000&lt;br /&gt;
   | publisher = ACM&lt;br /&gt;
   | year = 2000}}&amp;lt;/ref&amp;gt; for [[breadth-first traversal]] of trees makes uses of queues. Here we present a version of that algorithm parameterized over an abstract queue structure:&lt;br /&gt;
 &#039;&#039;&#039;functor&#039;&#039;&#039; BFT (Q: QUEUE) = (* after Okasaki, ICFP, 2000 *)&lt;br /&gt;
  &#039;&#039;&#039;struct&#039;&#039;&#039; &lt;br /&gt;
     &#039;&#039;&#039;datatype&#039;&#039;&#039; &#039;a tree&lt;br /&gt;
      = E&lt;br /&gt;
      | T &#039;&#039;&#039;of&#039;&#039;&#039; &#039;a * &#039;a tree * &#039;a tree&lt;br /&gt;
    &#039;&#039;&#039;fun&#039;&#039;&#039; bftQ (q  : &#039;a tree Q.queue)  : &#039;a list = &lt;br /&gt;
      &#039;&#039;&#039;if&#039;&#039;&#039; Q.isEmpty q &#039;&#039;&#039;then&#039;&#039;&#039; []&lt;br /&gt;
      &#039;&#039;&#039;else&#039;&#039;&#039; &#039;&#039;&#039;let&#039;&#039;&#039;&lt;br /&gt;
         &#039;&#039;&#039;val&#039;&#039;&#039; (t, q&#039;) = Q.remove q&lt;br /&gt;
        &#039;&#039;&#039;in&#039;&#039;&#039; &#039;&#039;&#039;case&#039;&#039;&#039; t&lt;br /&gt;
          &#039;&#039;&#039;of&#039;&#039;&#039; E =&amp;gt; bftQ q&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;          |&amp;lt;/nowiki&amp;gt; T (x, l, r) =&amp;gt; &amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;let&#039;&#039;&#039;&lt;br /&gt;
                &#039;&#039;&#039;val&#039;&#039;&#039; q&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; = Q.insert (r, Q.insert (l, q&#039;))&lt;br /&gt;
               &#039;&#039;&#039;in&#039;&#039;&#039;&lt;br /&gt;
                 x  :: bftQ q&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
                &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
         &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
     &#039;&#039;&#039;fun&#039;&#039;&#039; bft t = bftQ (Q.singleton t)&lt;br /&gt;
  &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
Please note that inside the &amp;lt;code&amp;gt;BFT&amp;lt;/code&amp;gt; structure, the program has no access to the particular queue representation in play. More concretely, there is no way for the program to, say. select the first list in the two-list queue representation, if that is indeed the representation being used. This [[data abstraction]] mechanism makes the breadth-first code truly agnostic to the queue representation choice.&lt;br /&gt;
This is in general desirable; in the present case, the queue structure can safely maintain any of the various logical invariants on which its correctness depends behind the bulletproof wall of abstraction.&lt;br /&gt;
&lt;br /&gt;
==Code examples==&lt;br /&gt;
{{unreferenced section|date=June 2013}}&lt;br /&gt;
Snippets of SML code are most easily studied by entering them into a &amp;quot;top-level&amp;quot;, also known as a [[read-eval-print loop]]. This is an interactive session that prints the inferred types of resulting or defined expressions. Many SML implementations provide an interactive top-level, including SML/NJ:&lt;br /&gt;
&lt;br /&gt;
 $ sml&lt;br /&gt;
   Standard ML of New Jersey v110.52 [built: Fri Jan 21 16:42:10 2005]&lt;br /&gt;
   -&lt;br /&gt;
&lt;br /&gt;
Code can then be entered at the &amp;quot;-&amp;quot; prompt. For example, to calculate 1+2*3:&lt;br /&gt;
&lt;br /&gt;
 - 1 + 2 * 3;&lt;br /&gt;
   val it = 7  : int&lt;br /&gt;
&lt;br /&gt;
The top-level infers the type of the expression to be &amp;quot;int&amp;quot; and gives the result &amp;quot;7&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Hello world===&lt;br /&gt;
&lt;br /&gt;
The following program &amp;quot;hello.sml&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 print &amp;quot;Hello world!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
can be compiled with MLton:&lt;br /&gt;
&lt;br /&gt;
 $ mlton hello.sml&lt;br /&gt;
&lt;br /&gt;
and executed:&lt;br /&gt;
&lt;br /&gt;
 $ ./hello&lt;br /&gt;
   Hello world!&lt;br /&gt;
&lt;br /&gt;
===Insertion sort===&lt;br /&gt;
&lt;br /&gt;
Insertion sort for lists of integers (ascending) is expressed concisely as follows:&lt;br /&gt;
 &#039;&#039;&#039;fun&#039;&#039;&#039; ins (n, []) = [n]&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;   | ins (n, ns &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;as&#039;&#039;&#039; h::t) = &#039;&#039;&#039;if&#039;&#039;&#039; (n&amp;lt;h) &#039;&#039;&#039;then&#039;&#039;&#039; n::ns &#039;&#039;&#039;else&#039;&#039;&#039; h::(ins (n, t))&lt;br /&gt;
  &#039;&#039;&#039;val&#039;&#039;&#039; insertionSort = List.foldr ins []&lt;br /&gt;
&lt;br /&gt;
This can be made polymorphic by abstracting over the ordering operator. Here we use the symbolic name &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt; for that operator.&lt;br /&gt;
 &#039;&#039;&#039;fun&#039;&#039;&#039; ins&#039; &amp;lt;&amp;lt; (num, nums) = &#039;&#039;&#039;let&#039;&#039;&#039;&lt;br /&gt;
     &#039;&#039;&#039;fun&#039;&#039;&#039; i (n, []) = [n]&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;     | i (n, ns &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;as&#039;&#039;&#039; h::t) = &#039;&#039;&#039;if&#039;&#039;&#039; &amp;lt;&amp;lt;(n,h) &#039;&#039;&#039;then&#039;&#039;&#039; n::ns &#039;&#039;&#039;else&#039;&#039;&#039; h::i(n,t)&lt;br /&gt;
    &#039;&#039;&#039;in&#039;&#039;&#039;&lt;br /&gt;
      i (num, nums)&lt;br /&gt;
    &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
   &#039;&#039;&#039;fun&#039;&#039;&#039; insertionSort&#039; &amp;lt;&amp;lt; = List.foldr (ins&#039; &amp;lt;&amp;lt;) []&lt;br /&gt;
The type of &amp;lt;code&amp;gt;insertionSort&#039;&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;(&#039;a * &#039;a -&amp;gt; bool) -&amp;gt; (&#039;a list) -&amp;gt; (&#039;a list)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Mergesort===&lt;br /&gt;
&lt;br /&gt;
{{main|Merge sort}}&lt;br /&gt;
&lt;br /&gt;
Here, the classic mergesort algorithm is implemented in three functions: split, merge and mergesort.&lt;br /&gt;
&lt;br /&gt;
The function &amp;lt;code&amp;gt;split&amp;lt;/code&amp;gt; is implemented with a local function named &amp;lt;code&amp;gt;loop&amp;lt;/code&amp;gt;, which has two additional parameters. The local function &amp;lt;code&amp;gt;loop&amp;lt;/code&amp;gt; is written in a  [[tail recursion|tail-recursive]] style; as such it can be compiled efficiently. This function makes use of SML&#039;s pattern matching syntax to differentiate between non-empty list (&amp;lt;code&amp;gt;x::xs&amp;lt;/code&amp;gt;) and empty list (&amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt;) cases. For stability, the input list &amp;lt;code&amp;gt;ns&amp;lt;/code&amp;gt; is reversed before being passed to &amp;lt;code&amp;gt;loop&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;(* Split list into two near-halves, returned as a pair.&#039;&#039;&lt;br /&gt;
 &#039;&#039; * The “halves” will either be the same size,&#039;&#039;&lt;br /&gt;
 &#039;&#039; * or the first will have one more element than the second.&#039;&#039;&lt;br /&gt;
 &#039;&#039; * Runs in O(n) time, where n = |xs|. *)&#039;&#039;&lt;br /&gt;
   &#039;&#039;&#039;local&#039;&#039;&#039;&lt;br /&gt;
     &#039;&#039;&#039;fun&#039;&#039;&#039; loop (x::y::zs, xs, ys) = loop (zs, x::xs, y::ys)&lt;br /&gt;
       | loop (x::[], xs, ys) = (x::xs, ys)&lt;br /&gt;
       | loop ([], xs, ys) = (xs, ys)&lt;br /&gt;
   &#039;&#039;&#039;in&#039;&#039;&#039;&lt;br /&gt;
     &#039;&#039;&#039;fun&#039;&#039;&#039; split ns = loop (List.rev ns, [], [])&lt;br /&gt;
   &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The local-in-end syntax could be replaced with a let-in-end syntax, yielding the equivalent definition:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;fun&#039;&#039;&#039; split ns = &#039;&#039;&#039;let&#039;&#039;&#039;&lt;br /&gt;
   &#039;&#039;&#039;fun&#039;&#039;&#039; loop (x::y::zs, xs, ys) = loop (zs, x::xs, y::ys)&lt;br /&gt;
     | loop (x::[], xs, ys) = (x::xs, ys)&lt;br /&gt;
     | loop ([], xs, ys) = (xs, ys)&lt;br /&gt;
   &#039;&#039;&#039;in&#039;&#039;&#039;&lt;br /&gt;
     loop (List.rev ns, [], [])&lt;br /&gt;
   &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
As with split, merge also uses a local function loop for efficiency.  The inner &amp;lt;code&amp;gt;loop&amp;lt;/code&amp;gt; is defined in terms of cases: when two non-empty lists are passed, when one non-empty list is passed, and when two empty lists are passed.  Note the use of the underscore (&amp;lt;code&amp;gt;_&amp;lt;/code&amp;gt;) as a wildcard pattern.&lt;br /&gt;
&lt;br /&gt;
This function merges two &amp;quot;ascending&amp;quot; lists into one ascending list. Note how the accumulator &amp;lt;code&amp;gt;out&amp;lt;/code&amp;gt; is built &amp;quot;backwards&amp;quot;, then reversed with &amp;lt;code&amp;gt;List.rev&amp;lt;/code&amp;gt; before being returned. This is a common technique—build a list backwards, then reverse it before returning it. In SML, lists are represented as imbalanced binary trees, and thus it is efficient to prepend an element to a list, but inefficient to append an element to a list. The extra pass over the list is a [[linear time]] operation, so while this technique requires more wall clock time, the asymptotics are not any worse.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;(* Merge two ordered lists using the order lt.&#039;&#039;&lt;br /&gt;
 &#039;&#039; * Pre: the given lists xs and ys must already be ordered per lt.&#039;&#039;&lt;br /&gt;
 &#039;&#039; * Runs in O(n) time, where n = |xs| + |ys|. *)&#039;&#039;&lt;br /&gt;
  &#039;&#039;&#039;fun&#039;&#039;&#039; merge lt (xs, ys) = &#039;&#039;&#039;let&#039;&#039;&#039;&lt;br /&gt;
    &#039;&#039;&#039;fun&#039;&#039;&#039; loop (out, left &#039;&#039;&#039;as&#039;&#039;&#039; x::xs, right &#039;&#039;&#039;as&#039;&#039;&#039; y::ys) =&lt;br /&gt;
            &#039;&#039;&#039;if&#039;&#039;&#039; lt (x, y) &#039;&#039;&#039;then&#039;&#039;&#039; loop (x::out, xs, right)&lt;br /&gt;
            &#039;&#039;&#039;else&#039;&#039;&#039; loop (y::out, left, ys)&lt;br /&gt;
      | loop (out, x::xs, []) = loop (x::out, xs, [])&lt;br /&gt;
      | loop (out, [], y::ys) = loop (y::out, [], ys)&lt;br /&gt;
      | loop (out, [], []) = List.rev out&lt;br /&gt;
    &#039;&#039;&#039;in&#039;&#039;&#039;&lt;br /&gt;
      loop ([], xs, ys)&lt;br /&gt;
    &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The main function.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;(* Sort a list in according to the given ordering operation lt.&#039;&#039;&lt;br /&gt;
 &#039;&#039; * Runs in O(n log n) time, where n = |xs|.&#039;&#039;&lt;br /&gt;
 &#039;&#039; *)&#039;&#039;&lt;br /&gt;
  &#039;&#039;&#039;fun&#039;&#039;&#039; mergesort lt xs = &#039;&#039;&#039;let&#039;&#039;&#039;&lt;br /&gt;
    &#039;&#039;&#039;val&#039;&#039;&#039; merge&#039; = merge lt&lt;br /&gt;
    &#039;&#039;&#039;fun&#039;&#039;&#039; ms [] = []&lt;br /&gt;
      | ms [x] = [x]&lt;br /&gt;
      | ms xs = &#039;&#039;&#039;let&#039;&#039;&#039;&lt;br /&gt;
          &#039;&#039;&#039;val&#039;&#039;&#039; (left, right) = split xs&lt;br /&gt;
          &#039;&#039;&#039;in&#039;&#039;&#039;&lt;br /&gt;
            merge&#039; (ms left, ms right)&lt;br /&gt;
          &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
    &#039;&#039;&#039;in&#039;&#039;&#039;&lt;br /&gt;
      ms xs&lt;br /&gt;
    &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Also note that the code makes no mention of variable types, with the exception of the :: and [] syntax which signify lists.  This code will sort lists of any type, so long as a consistent ordering function lt can be defined.  Using [[Hindley–Milner type inference]], the compiler is capable of inferring the types of all variables, even complicated types such as that of the lt function.&lt;br /&gt;
&lt;br /&gt;
===Quicksort===&lt;br /&gt;
&lt;br /&gt;
Quicksort can be expressed as follows. This generic quicksort consumes an order operator &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
  &#039;&#039;&#039;fun&#039;&#039;&#039; quicksort &amp;lt;&amp;lt; xs = &#039;&#039;&#039;let&#039;&#039;&#039;&lt;br /&gt;
     &#039;&#039;&#039;fun&#039;&#039;&#039; qs [] = []&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;      | qs [x] = [x]&lt;br /&gt;
      | qs (p::xs) = &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;let&#039;&#039;&#039;&lt;br /&gt;
          &#039;&#039;&#039;val&#039;&#039;&#039; (less, more) = List.partition (&#039;&#039;&#039;fn&#039;&#039;&#039; x =&amp;gt; &amp;lt;&amp;lt; (x, p)) xs&lt;br /&gt;
          &#039;&#039;&#039;in&#039;&#039;&#039;&lt;br /&gt;
            qs less @ p :: qs more&lt;br /&gt;
          &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
     &#039;&#039;&#039;in&#039;&#039;&#039;&lt;br /&gt;
       qs xs&lt;br /&gt;
     &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Expression language===&lt;br /&gt;
&lt;br /&gt;
Note the relative ease with which a small expression language is defined and processed.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;exception&#039;&#039;&#039; Err&lt;br /&gt;
 &lt;br /&gt;
  &#039;&#039;&#039;datatype&#039;&#039;&#039; ty&lt;br /&gt;
    = IntTy&lt;br /&gt;
    | BoolTy&lt;br /&gt;
 &lt;br /&gt;
  &#039;&#039;&#039;datatype&#039;&#039;&#039; exp&lt;br /&gt;
    = True&lt;br /&gt;
    | False&lt;br /&gt;
    | Int &#039;&#039;&#039;of&#039;&#039;&#039; int&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;   | Not &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;of&#039;&#039;&#039; exp&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;   | Add &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;of&#039;&#039;&#039; exp * exp&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;   | If &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;of&#039;&#039;&#039; exp * exp * exp&lt;br /&gt;
 &lt;br /&gt;
  &#039;&#039;&#039;fun&#039;&#039;&#039; typeOf (True) = BoolTy&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;   |&amp;lt;/nowiki&amp;gt; typeOf (False) = BoolTy&amp;lt;nowiki&amp;gt;&lt;br /&gt;
    |&amp;lt;/nowiki&amp;gt; typeOf (Int _) = IntTy&amp;lt;nowiki&amp;gt;&lt;br /&gt;
    |&amp;lt;/nowiki&amp;gt; typeOf (Not e) = &amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;if&#039;&#039;&#039; typeOf e = BoolTy &#039;&#039;&#039;then&#039;&#039;&#039; BoolTy &#039;&#039;&#039;else&#039;&#039;&#039; &#039;&#039;&#039;raise&#039;&#039;&#039; Err&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;   |&amp;lt;/nowiki&amp;gt; typeOf (Add (e1, e2)) = &amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
        &#039;&#039;&#039;if&#039;&#039;&#039; (typeOf e1 = IntTy) &#039;&#039;&#039;andalso&#039;&#039;&#039; (typeOf e2 = IntTy) &#039;&#039;&#039;then&#039;&#039;&#039; IntTy &#039;&#039;&#039;else&#039;&#039;&#039; &#039;&#039;&#039;raise&#039;&#039;&#039; Err&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;   |&amp;lt;/nowiki&amp;gt; typeOf (If (e1, e2, e3)) = &amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
        &#039;&#039;&#039;if&#039;&#039;&#039; typeOf e1 &amp;lt;&amp;gt; BoolTy &#039;&#039;&#039;then&#039;&#039;&#039; &#039;&#039;&#039;raise&#039;&#039;&#039; Err&lt;br /&gt;
        &#039;&#039;&#039;else&#039;&#039;&#039; &#039;&#039;&#039;if&#039;&#039;&#039; typeOf e2 &amp;lt;&amp;gt; typeOf e3 &#039;&#039;&#039;then&#039;&#039;&#039; &#039;&#039;&#039;raise&#039;&#039;&#039; Err&lt;br /&gt;
        &#039;&#039;&#039;else&#039;&#039;&#039; typeOf e2&lt;br /&gt;
  &lt;br /&gt;
  &#039;&#039;&#039;fun&#039;&#039;&#039; eval (True) = True&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;   |&amp;lt;/nowiki&amp;gt; eval (False) = False&amp;lt;nowiki&amp;gt;&lt;br /&gt;
    |&amp;lt;/nowiki&amp;gt; eval (Int n) = Int n&amp;lt;nowiki&amp;gt;&lt;br /&gt;
    |&amp;lt;/nowiki&amp;gt; eval (Not e) = &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;      (&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;case&#039;&#039;&#039; eval e&lt;br /&gt;
          &#039;&#039;&#039;of&#039;&#039;&#039; True =&amp;gt; False&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;          | False =&amp;gt; True&lt;br /&gt;
           | _ =&amp;gt; &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;raise&#039;&#039;&#039; Fail &amp;quot;type-checking is broken&amp;quot;)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;   |&amp;lt;/nowiki&amp;gt; eval (Add (e1, e2)) = &amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;let&#039;&#039;&#039;&lt;br /&gt;
         &#039;&#039;&#039;val&#039;&#039;&#039; (Int n1) = eval e1&lt;br /&gt;
        &#039;&#039;&#039;val&#039;&#039;&#039; (Int n2) = eval e2&lt;br /&gt;
        &#039;&#039;&#039;in&#039;&#039;&#039;&lt;br /&gt;
          Int (n1 + n2)&lt;br /&gt;
        &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
    | eval (If (e1, e2, e3)) = &lt;br /&gt;
        &#039;&#039;&#039;if&#039;&#039;&#039; eval e1 = True &#039;&#039;&#039;then&#039;&#039;&#039; eval e2 &#039;&#039;&#039;else&#039;&#039;&#039; eval e3&lt;br /&gt;
 &lt;br /&gt;
  &#039;&#039;&#039;fun&#039;&#039;&#039; chkEval e = (ignore (typeOf e); eval e) &#039;&#039;(* will raise Err on type error *)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Arbitrary-precision factorial function (libraries)===&lt;br /&gt;
&lt;br /&gt;
In SML, the IntInf module provides arbitrary-precision integer arithmetic. Moreover, integer literals may be used as arbitrary-precision integers without the programmer having to do anything.&lt;br /&gt;
&lt;br /&gt;
The following program &amp;quot;fact.sml&amp;quot; implements an arbitrary-precision factorial function and prints the factorial of 120:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;fun&#039;&#039;&#039; fact n  : IntInf.int =&lt;br /&gt;
       &#039;&#039;&#039;if&#039;&#039;&#039; n=0 &#039;&#039;&#039;then&#039;&#039;&#039; 1 &#039;&#039;&#039;else&#039;&#039;&#039; n * fact(n - 1)&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;val&#039;&#039;&#039; () =&lt;br /&gt;
       print (IntInf.toString (fact 120) ^ &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
and can be compiled and run with:&lt;br /&gt;
&lt;br /&gt;
   $ mlton fact.sml&lt;br /&gt;
   $ ./fact&lt;br /&gt;
   66895029134491270575881180540903725867527463331380298102956713523016335&lt;br /&gt;
   57244962989366874165271984981308157637893214090552534408589408121859898&lt;br /&gt;
   481114389650005964960521256960000000000000000000000000000&lt;br /&gt;
&lt;br /&gt;
===Numerical derivative (higher-order functions)===&lt;br /&gt;
&lt;br /&gt;
Since SML is a functional programming language, it is easy to create and pass around functions in SML programs. This capability has an enormous number of applications. Calculating the numerical derivative of a function is one such application. The following SML function &amp;quot;d&amp;quot; computes the numerical derivative of a given function &amp;quot;f&amp;quot; at a given point &amp;quot;x&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 - fun d delta f x =&lt;br /&gt;
       (f (x + delta) - f (x - delta)) / (2.0 * delta);&lt;br /&gt;
   val d = fn  : real -&amp;gt; (real -&amp;gt; real) -&amp;gt; real -&amp;gt; real&lt;br /&gt;
&lt;br /&gt;
This function requires a small value &amp;quot;delta&amp;quot;. A good choice for delta when using this algorithm is the cube root of the [[machine epsilon]].{{Citation needed|date=August 2008}}&lt;br /&gt;
&lt;br /&gt;
The type of the function &amp;quot;d&amp;quot; indicates that it maps a &amp;quot;float&amp;quot; onto another function with the type &amp;quot;(real -&amp;gt; real) -&amp;gt; real -&amp;gt; real&amp;quot;. This allows us to partially apply arguments. This functional style is known as [[currying]]. In this case, it is useful to partially apply the first argument &amp;quot;delta&amp;quot; to &amp;quot;d&amp;quot;, to obtain a more specialised function:&lt;br /&gt;
&lt;br /&gt;
 - val d = d 1E~8;&lt;br /&gt;
   val d = fn  : (real -&amp;gt; real) -&amp;gt; real -&amp;gt; real&lt;br /&gt;
&lt;br /&gt;
Note that the inferred type indicates that the replacement &amp;quot;d&amp;quot; is expecting a function with the type &amp;quot;real -&amp;gt; real&amp;quot; as its first argument. We can compute a numerical approximation to the derivative of &amp;lt;math&amp;gt;f(x) = x^3-x-1&amp;lt;/math&amp;gt; at &amp;lt;math&amp;gt;x=3&amp;lt;/math&amp;gt; with:&lt;br /&gt;
&lt;br /&gt;
 - d (fn x =&amp;gt; x * x * x - x - 1.0) 3.0;&lt;br /&gt;
   val it = 25.9999996644  : real&lt;br /&gt;
&lt;br /&gt;
The correct answer is &amp;lt;math&amp;gt;f&#039;(x) = 3x^2-1 &amp;lt;/math&amp;gt;=&amp;gt;&amp;lt;math&amp;gt; f&#039;(3) = 27-1 = 26&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The function &amp;quot;d&amp;quot; is called a &amp;quot;higher-order function&amp;quot; because it accepts another function (&amp;quot;f&amp;quot;) as an argument.&lt;br /&gt;
&lt;br /&gt;
Curried and higher-order functions can be used to eliminate redundant code. For example, a library may require functions of type &amp;lt;code&amp;gt;a -&amp;gt; b&amp;lt;/code&amp;gt;, but it is more convenient to write functions of type &amp;lt;code&amp;gt;a * c -&amp;gt; b&amp;lt;/code&amp;gt; where there is a fixed relationship between the objects of type &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;. A higher order function of type (a * c -&amp;gt; b) -&amp;gt; (a -&amp;gt; b) can factor out this commonality. This is an example of the [[adapter pattern]].&lt;br /&gt;
&lt;br /&gt;
===Discrete wavelet transform (pattern matching)===&lt;br /&gt;
&lt;br /&gt;
The 1D [[Haar wavelet]] [[Discrete wavelet transform|transform]] of an [[integer]]-power-of-two-length list of numbers can be implemented very succinctly in SML and is an excellent example of the use of [[pattern matching]] over lists, taking pairs of elements (&amp;quot;h1&amp;quot; and &amp;quot;h2&amp;quot;) off the front and storing their sums and differences on the lists &amp;quot;s&amp;quot; and &amp;quot;d&amp;quot;, respectively:&lt;br /&gt;
&lt;br /&gt;
 - fun haar l = let&lt;br /&gt;
       fun aux [s] [] d = s  :: d&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;        |&amp;lt;/nowiki&amp;gt; aux [] s d = aux s [] d&amp;lt;nowiki&amp;gt;&lt;br /&gt;
         |&amp;lt;/nowiki&amp;gt; aux (h1::h2::t) s d = aux t (h1+h2&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;  :: s) (h1-h2  :: d)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;        |&amp;lt;/nowiki&amp;gt; aux _ _ _ = raise Empty&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;      in  &lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;       aux l [] []&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;      end;&lt;br /&gt;
   val haar = fn&amp;lt;/nowiki&amp;gt;  : int list -&amp;gt; int list&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 - haar [1, 2, 3, 4, ~4, ~3, ~2, ~1];&lt;br /&gt;
   val it = [0,20,4,4,~1,~1,~1,~1]  : int list&lt;br /&gt;
&lt;br /&gt;
Pattern matching is a useful construct that allows complicated transformations to be represented clearly and succinctly. Moreover, SML compilers turn pattern matches into efficient code, resulting in programs that are not only shorter but also faster.&lt;br /&gt;
&lt;br /&gt;
==Implementations==&lt;br /&gt;
&lt;br /&gt;
Many SML implementations exist, including:&lt;br /&gt;
&lt;br /&gt;
* [[MLton]] is a [[Whole program optimization|whole-program optimizing]] compiler that produces very fast code compared to other ML implementations. [http://www.mlton.org]&lt;br /&gt;
* [http://www.polyml.org/ Poly/ML] is a full implementation of Standard ML that produces fast code and supports multicore hardware (via Posix threads); its runtime system performs parallel garbage collection and online sharing of immutable substructures.&lt;br /&gt;
* [http://isabelle.in.tum.de Isabelle/ML] integrates parallel Poly/ML into an interactive theorem prover, with a sophisticated IDE (based on [[jEdit]]) both for ML and the proof language.&lt;br /&gt;
* [[Standard ML of New Jersey]] (abbreviated SML/NJ) is a full compiler, with associated libraries, tools, an interactive shell, and documentation. [http://www.smlnj.org/]&lt;br /&gt;
* [[Moscow ML]] is a light-weight implementation, based on the [[Caml|CAML Light]] runtime engine. It implements the full SML language, including SML Modules, and much of the SML Basis Library. [http://www.itu.dk/people/sestoft/mosml.html]&lt;br /&gt;
* [http://www.cs.cornell.edu/home/jgm/tilt.html TILT] is a full certifying compiler for SML. It uses typed intermediate languages to optimize code and ensure correctness, and can compile to [[Type system|typed]] [[Assembly language]].&lt;br /&gt;
* [http://www.mpi-sws.org/~rossberg/hamlet/ HaMLet] is an SML interpreter that aims to be an accurate and accessible reference implementation of the standard.&lt;br /&gt;
* The [http://www.it-c.dk/research/mlkit/ ML Kit] integrates a garbage collector (which can be disabled) and [[region-based memory management]] with automatic inference of regions, aiming realtime applications. Its implementation is based very closely on the Definition.&lt;br /&gt;
* [http://www.cl.cam.ac.uk/Research/TSG/SMLNET/ SML.NET] allows compiling to the Microsoft [[Common Language Runtime|CLR]] and has extensions for linking with other [[.NET Framework|.NET]] code.&lt;br /&gt;
* SML2c is a batch compiler and compiles only module-level declarations (i.e. signatures, structures, functors) into [[C (programming language)|C]]. It is based on SML/NJ version 0.67 and shares the front end, and most of its run-time system, but does not support SML/NJ style debugging and profiling. Module-level programs that run on SML/NJ can be compiled by sml2c with no changes.&lt;br /&gt;
* The [[Poplog]] system implements a version of SML, with [[POP-11]], and optionally [[Common Lisp]], and [[Prolog]], allowing mixed language programming. For all, the implementation language is POP-11, which is compiled incrementally. It also has an integrated [[Emacs]]-like editor that communicates with the compiler.&lt;br /&gt;
* [http://www.pllab.riec.tohoku.ac.jp/smlsharp/ SML#] is an extension of SML providing record polymorphism and C language interoperability. It is a conventional native compiler and its name is &#039;&#039;not&#039;&#039; an allusion to running on the .NET framework.&lt;br /&gt;
* [[Alice (programming language)|Alice]]: an interpreter for Standard ML by Saarland University adding features for [[lazy evaluation]], [[Concurrency (computer science)|concurrency]] ([[thread (computer science)|multithreading]] and [[distributed computing]] via [[remote procedure call]]s) and [[constraint programming]].&lt;br /&gt;
All of these implementations are [[open-source]] and freely available.  Most are implemented themselves in SML.  There are no longer any commercial SML implementations.  [[Harlequin (software company)|Harlequin]] once produced a commercial IDE and compiler for SML called [[MLWorks]].  The company is now defunct.  [[MLWorks]] passed on to [[Xanalys]] and was later acquired by [[Ravenbrook Limited]] on 2013-04-26 and open sourced.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Alice (programming language)|Alice]]&lt;br /&gt;
* [[ML programming language|ML]]&lt;br /&gt;
* [[Concurrent ML]]&lt;br /&gt;
* [[Dependent ML]]&lt;br /&gt;
* [[Extensible ML]]&lt;br /&gt;
* [[Extended ML]]&lt;br /&gt;
* [[F Sharp (programming language)|F#]]&lt;br /&gt;
* [[OCaml]]&lt;br /&gt;
* [http://www.impredicative.com/ur/ Ur/Web]&lt;br /&gt;
* [http://mythryl.org Mythryl]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;!--&amp;lt;nowiki&amp;gt;&lt;br /&gt;
  See http://en.wikipedia.org/wiki/Wikipedia:Footnotes for an explanation of how&lt;br /&gt;
  to generate footnotes using the &amp;lt;ref&amp;gt; and &amp;lt;/ref&amp;gt; tags, and the template below&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;--&amp;gt;&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://www.smlnj.org/sml.html What is SML?]&lt;br /&gt;
* [http://www.smlnj.org/sml97.html What is SML &#039;97?]&lt;br /&gt;
* [http://www.successor-ml.org successor ML (sML)] is intended to provide a vehicle for the continued evolution of ML, using Standard ML as a starting point.&lt;br /&gt;
* {{scholarpedia|title=Standard ML language|urlname=Standard_ML_language|curator=[[Mads Tofte]]}}&lt;br /&gt;
* [http://www.classes.cs.uchicago.edu/archive/2007/winter/22610-1/docs/sml-tutorial.pdf Univ. of Chicago - SML tutorial (slides)]&lt;br /&gt;
* [http://www.cs.cmu.edu/~rwh/smlbook/book.pdf Carnegie Mellon Univ. - The Book of SML]&lt;br /&gt;
* [http://www.cs.cmu.edu/~rwh/smlbook/examples/ Carnegie Mellon Univ. - SML - Examples]&lt;br /&gt;
* [http://www.lfcs.inf.ed.ac.uk/reports/97/ECS-LFCS-97-364/ECS-LFCS-97-364.pdf University of Edinburgh - Programming in Standard ML &#039;97: A Tutorial Introduction (pdf)] &lt;br /&gt;
* [http://www.dcs.ed.ac.uk/home/stg/NOTES/notes.html University of Edinburgh - SML &#039;97 - Online Tutorial]&lt;br /&gt;
&lt;br /&gt;
[[Category:Procedural programming languages]]&lt;br /&gt;
[[Category:ML programming language family]]&lt;br /&gt;
[[Category:Functional languages]]&lt;br /&gt;
[[Category:Programming languages created in 1990]]&lt;/div&gt;</summary>
		<author><name>89.204.135.221</name></author>
	</entry>
	<entry>
		<id>https://en.formulasearchengine.com/w/index.php?title=Gustafson%27s_law&amp;diff=13031</id>
		<title>Gustafson&#039;s law</title>
		<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/w/index.php?title=Gustafson%27s_law&amp;diff=13031"/>
		<updated>2014-01-23T22:08:13Z</updated>

		<summary type="html">&lt;p&gt;89.204.138.35: /* External links */ replaced Category:Rules of thumb by Category:Programming rules of thumb with related Amdahl&amp;#039;s law&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; align=&amp;quot;right&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot; | [[Feynman diagrams]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;t-channel&#039;&#039;&#039;&amp;lt;br&amp;gt;[[Image:MollerScattering-t.svg|220px]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;u-channel&#039;&#039;&#039;&amp;lt;br&amp;gt;[[Image:MollerScattering-u.svg|220px]]&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Møller scattering&#039;&#039;&#039; is the name given to [[electron]]-electron scattering in [[Quantum Field Theory]], named after the Danish physicist [[Christian Møller]].  The electron interaction that is idealized in Møller scattering forms the theoretical basis of many familiar phenomena such as the repulsion of electrons in the Helium nucleus.  While formerly many particle colliders were designed specifically for electron-electron collisions, more recently electron-positron colliders have become more common.  Nevertheless Møller scattering remains a paradigmatic process within the theory of particle interactions.&lt;br /&gt;
&lt;br /&gt;
We can express this process in the usual notation, often used in [[particle physics]]:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
e^{-} e^{-} \longrightarrow e^{-} e^{-}&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
In [[quantum electrodynamics]], there are two tree-level [[Feynman diagrams]] describing the process: a [[Mandelstam variables|t-channel]] diagram in which the electrons exchange a [[photon]] and a similar u-channel diagram.  [[Crossing symmetry]], one of the tricks often used to evaluate Feynman diagrams, in this case implies that Møller scattering should have the same cross section as [[Bhabha scattering]] (electron-[[positron]] scattering).&lt;br /&gt;
&amp;lt;!-- Image with unknown copyright status removed: [[Image:MollerTreeLevelDiagrams.jpg]] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the electroweak theory the process is instead described by four tree-level diagrams: the two from QED and an identical pair in which a [[Z boson]] is exchanged instead of a photon.  The weak force is purely left-handed, but the weak and electromagnetic forces mix into the particles we observe.  The photon is symmetric by construction, but the Z boson prefers left-handed particles to right-handed particles.  Thus the cross sections for left-handed electrons and right-handed differ.  The difference was first noticed by the Russian physicist [[Yakov Zel&#039;dovich]] in 1959, but at the time he believed the [[parity (physics)|parity]] violating asymmetry (a few hundred parts per billion) was too small to be observed.  This parity violating asymmetry can be measured by firing a polarized beam of electrons through an unpolarized electron target ([[liquid hydrogen]], for instance), as was done by an experiment at the [[Stanford Linear Accelerator Center]], SLAC-E158.&amp;lt;ref&amp;gt;{{cite journal&lt;br /&gt;
| title = Precision Measurement of the Weak Mixing Angle in Møller Scattering&lt;br /&gt;
| author = Anthony, P. L. and others&lt;br /&gt;
| collaboration = SLAC E158 Collaboration&lt;br /&gt;
| journal = Phys. Rev. Lett.&lt;br /&gt;
| volume = 95&lt;br /&gt;
| issue = 8&lt;br /&gt;
| pages = 081601&lt;br /&gt;
| numpages = 5&lt;br /&gt;
|date=Aug 2005&lt;br /&gt;
| doi = 10.1103/PhysRevLett.95.081601&lt;br /&gt;
| url = http://link.aps.org/doi/10.1103/PhysRevLett.95.081601&lt;br /&gt;
| publisher = American Physical Society|arxiv = hep-ex/0504049 |bibcode = 2005PhRvL..95h1601A }}&amp;lt;/ref&amp;gt; The asymmetry in Møller scattering is&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
A_{PV}=-m E \frac{G_F}{ \sqrt{2} \pi \alpha } \frac {16 \sin^2 \Theta_{\textrm{cm}}}&lt;br /&gt;
{\left(3+\cos^2 \Theta_{\textrm{cm}} \right)^2 } \left( \frac{1}{4} - \sin^2 \theta_W \right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
where m is the electron mass, E the energy of the incoming electron (in the reference frame of the other electron), &amp;lt;math&amp;gt;G_F&amp;lt;/math&amp;gt; is [[Fermi&#039;s interaction|Fermi&#039;s constant]], &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; is the [[fine structure constant]], &amp;lt;math&amp;gt;\Theta_{\textrm{cm}}&amp;lt;/math&amp;gt; is the scattering angle in the center of mass frame, and &amp;lt;math&amp;gt;\theta_W&amp;lt;/math&amp;gt; is the weak mixing angle, also known as the [[Weinberg angle]].&lt;br /&gt;
&lt;br /&gt;
== QED computation ==&lt;br /&gt;
&amp;lt;!--(to be completed)--&amp;gt;&lt;br /&gt;
&amp;lt;!-- INTRODUCTION The Moller scattering can be calculated from the QED point-of-view, at the tree-level, with the help of the two diagrams showed on this page. This two diagrams are contributing at leading order from the QED point-of-view. If we are taking in account he weak force, wich is unified with the electromagnetic force at high energy, then we have to add two tree-level diagram for the exchange of a Z^0 boson. Here we will focuse our attention on a strict tree-level QED computation of the cross section, which is rather instructive but maybe not the most accurate description from a physical point-of-view.--&amp;gt;&lt;br /&gt;
&amp;lt;!-- PRELIMINARY The two feynman diagrams are show on this page. We will redraw it for the purpose of the calculation, with the correct notations we will use for the input/output impulses.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Empty section|date=July 2010}}&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
*[http://www-project.slac.stanford.edu/e158/ SLAC E158:  Measuring the Electron&#039;s WEAK Charge]&lt;br /&gt;
&lt;br /&gt;
{{QED}}&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Moller Scattering}}&lt;br /&gt;
[[Category:Quantum field theory]]&lt;br /&gt;
[[Category:Quantum electrodynamics]]&lt;/div&gt;</summary>
		<author><name>89.204.138.35</name></author>
	</entry>
	<entry>
		<id>https://en.formulasearchengine.com/w/index.php?title=PAQ&amp;diff=7580</id>
		<title>PAQ</title>
		<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/w/index.php?title=PAQ&amp;diff=7580"/>
		<updated>2013-12-28T13:09:37Z</updated>

		<summary type="html">&lt;p&gt;89.204.139.20: /* PAQ derivations */ cite web error (missing url=)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In [[number theory]], the &#039;&#039;&#039;Hasse norm theorem&#039;&#039;&#039; states that if L/K is a [[cyclic extension]] of [[number field]]s, then if a nonzero element of K is a local norm everywhere, then it is a global norm.&lt;br /&gt;
Here to be a global norm means to be an element &#039;&#039;k&#039;&#039; of K such that there is an element &#039;&#039;l&#039;&#039; of L with &amp;lt;math&amp;gt;\mathbf{N}_{L/K}(l) = k&amp;lt;/math&amp;gt;; in other words &#039;&#039;k&#039;&#039; is a relative norm of some element of the extension field L. To be a local norm means that for some prime &#039;&#039;&#039;p&#039;&#039;&#039; of K and some prime &#039;&#039;&#039;P&#039;&#039;&#039; of L lying over K, then &#039;&#039;k&#039;&#039; is a norm from L&amp;lt;sub&amp;gt;&#039;&#039;&#039;P&#039;&#039;&#039;&amp;lt;/sub&amp;gt;; here the &amp;quot;prime&amp;quot; &#039;&#039;&#039;p&#039;&#039;&#039; can be an archimedean valuation, and the theorem is a statement about completions in all valuations, archimedean and non-archimedean.&lt;br /&gt;
&lt;br /&gt;
The theorem is no longer true in general if the extension is abelian but not cyclic.  A counter-example is given by the field &amp;lt;math&amp;gt;{\mathbf Q}(\sqrt{13},\sqrt{17})/{\mathbf Q}&amp;lt;/math&amp;gt; where every rational square is a local norm everywhere but &amp;lt;math&amp;gt;5^2&amp;lt;/math&amp;gt; is not a global norm.&lt;br /&gt;
&lt;br /&gt;
This is an example of a theorem stating a [[local-global principle]], and is due to [[Helmut Hasse]].&lt;br /&gt;
&lt;br /&gt;
The Hasse norm theorem can be deduced from the theorem that an element of the Galois cohomology group H&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;(&#039;&#039;L&#039;&#039;/&#039;&#039;K&#039;&#039;) is trivial if it is trivial locally everywhere, which is in turn equivalent to the deep theorem that the first cohomology of the idele class group vanishes. This is true for all finite Galois extensions of number fields, not just cyclic ones. For cyclic extensions the group  H&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;(&#039;&#039;L&#039;&#039;/&#039;&#039;K&#039;&#039;) is isomorphic to the Tate cohomology group H&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;(&#039;&#039;L&#039;&#039;/&#039;&#039;K&#039;&#039;) which describes which elements are norms, so for cyclic extensions it becomes Hasse&#039;s theorem that an element is a norm if it is a local norm everywhere.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[[Grunwald–Wang theorem]], about when an element that is a power everywhere locally is a power.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
* H. Hasse, &amp;quot;A history of class field theory&amp;quot;, in [[J.W.S. Cassels]] and [[A. Frohlich]] (edd), &#039;&#039;Algebraic number theory&#039;&#039;, [[Academic Press]], 1973.  Chap.XI.&lt;br /&gt;
* G. Janusz, &#039;&#039;Algebraic number fields&#039;&#039;, Academic Press, 1973.  Theorem V.4.5, p.&amp;amp;nbsp;156&lt;br /&gt;
&lt;br /&gt;
[[Category:Class field theory]]&lt;br /&gt;
[[Category:Theorems in algebraic number theory]]&lt;/div&gt;</summary>
		<author><name>89.204.139.20</name></author>
	</entry>
	<entry>
		<id>https://en.formulasearchengine.com/w/index.php?title=Polarity_(international_relations)&amp;diff=243906</id>
		<title>Polarity (international relations)</title>
		<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/w/index.php?title=Polarity_(international_relations)&amp;diff=243906"/>
		<updated>2012-07-13T21:58:27Z</updated>

		<summary type="html">&lt;p&gt;89.204.225.65: /* Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;They contact me Emilia. For a whilst she&#039;s been in South Dakota. Bookkeeping is what I do. One of the things he loves most is ice skating but he is struggling to discover time for it.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;My web-site ... at home std test ([http://netwk.hannam.ac.kr/xe/data_2/38191 More Information and facts])&lt;/div&gt;</summary>
		<author><name>89.204.225.65</name></author>
	</entry>
	<entry>
		<id>https://en.formulasearchengine.com/w/index.php?title=Ideal_lattice_cryptography&amp;diff=267902</id>
		<title>Ideal lattice cryptography</title>
		<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/w/index.php?title=Ideal_lattice_cryptography&amp;diff=267902"/>
		<updated>2012-06-16T13:42:57Z</updated>

		<summary type="html">&lt;p&gt;89.204.139.226: /* Ideal-LWE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To address these questions, Medtronic in 2011 agreed to two unbiased evaluations of its trial information. As a part of the Yale University Open Information Entry project - spearheaded by Dr. Harlan Krumholz - groups of researchers at Oregon Well being &amp;amp; Science University in Portland and Britain&#039;s College of York, have been selected to conduct the reviews. The Oregon review also discovered that Infuse was associated with an elevated risk of most cancers after two years, although the general threat was low and did not contain a selected kind of malignancy. Additionally they found that revealed trial information emphasised the optimistic, whereas underreporting uncomfortable side effects.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;This can be a well made knife in each respect. I&#039;m fairly abusive towards my gear and the Native is so nice, it is exhausting to justify abusing it. So what I do is carry it when I do know I&#039;m going to have a straightforward day, like on the weekends. The pinned construction does make me somewhat nervous, however I own other American instruments that do that just like the Leatherman Juice. I want they&#039;d put screws on it, however I belief Spyderco, and neither firm has given me a reason to not trust their USA made merchandise.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;I was despatched a Sheffield Lock-Back Pocket Knife to test and overview. The knife is lightweight and well made. The aluminum handle and stainless steel blade that locks in place when open make it and [http://istoriya.sumy.ua/index.php/Best_Quality_Pocket_Knife_Brands excellent fishing] knife. The blade is very sharp and has a serrated and straight part on the 2 1/8 inch blade. to your doctor concerining your state of affairs and never much different [http://Www.Thebestpocketknifereviews.com/best-pocket-knife-brand-good-knives-in-the-world/ pocket knife brands] from the first, but does come bathtub may be very small and uncomfortable as a result of when a bath been exposed to acidic foods such as distinctive. So that everybody receives the help they As regards to the dealer and approximately 13 mm thick.!&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;On the con aspect it does not likely have a gap system. No thumb stud or real indention. You&#039;ll be able to kinda push open with you thumb then flick it open. Otherwise its finest you use two arms to stop getting minimize up. the shape of the knife when open it very angular and sharp and isn&#039;t a very comfy grip. It did well with chopping fatwood and was capable of produce some nice curls. The thicker handle really offers you something to carry on to while you minimize, whereas the scalloped edges of the scales keep it comfy.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;I bought this [http://wiki.shol.ru/index.php/Best_Pocket_Knives_2013 Spyderco Pocket] knife from Amazon (where I buy everything) in February 2012. Amazon has it listed as a Spyderco Delica4 Lightweight FRN Flat Ground PlainEdge Knife for ~$60, which is what I paid for it on the time. On the Spyderco web site it&#039;s listed as the Spyderco Delica4 Flat Ground FRN - C11F for $one hundred and five.I actually like [http://www.Malgefragt.net/mwiki/index.php?title=List_Of_Best_Pocket_Knife_Brands Spyderco knives] and have owned near a dozen over time. This knife&#039;s blue deal with [http://diaspora-advertiser.com/author/lgxja/ attracted] my eye for subjective aesthetic reasons, however it&#039;s additionally practical in that you could simply spot it should it fall to the bottom out in nature.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;My evaluate sample was purchased from Amazon using our Prime account. It looks like the pocket knives often get right here in a day because they use the courier service for actually small objects like this. I&#039;ve routinely ordered pocket knives and watches on a Sunday and had them delivered on Monday. However they will not tell you in advance how they&#039;re transport, so it&#039;s a little little bit of a dice roll whether or not you may get it in just a day. Product Description They&#039;ve a deal with made out of folded metallic (often brass) stamped with kanjis detailing the title of the maker and the metal of the blade&lt;/div&gt;</summary>
		<author><name>89.204.139.226</name></author>
	</entry>
</feed>