2016-03-19 5 views

Antwort

2

Um diese Frage zu beantworten Ihre Bezeichner umbenennen hilft:

fun apply g x y = g x y; 
val apply = fn : ('a -> 'b -> 'c) -> 'a -> 'b -> 'c 

apply entspricht, was Sie f anrufen. Was gilt, informell ist, nehmen Sie eine Funktion, g, von zwei Variablen (in curried form) und zwei Argumente x,y und wendet tatsächlich g auf diese Argumente. g

Als Beispiel definieren:

fun sum x y = x + y; 
val sum = fn : int -> int -> int 

Dann wird zum Beispiel:

apply sum 5 7; 
val it = 12 : int 

In der Art Signatur apply dem Teil

('a -> 'b -> 'c) 

ist die Art der g . Es ist polymorph. Sie können eine beliebige Funktion auf Argumente eines geeigneten Typs anwenden. Wenn Sie tatsächlich apply verwenden (wie ich oben mit sum getan habe), dann wird der SML-Compiler genügend Informationen haben, um herauszufinden, welche konkreten Typen den Typvariablen 'a, 'b, 'c entsprechen. der Gesamttyp anzuwenden ist

('a -> 'b -> 'c) -> 'a -> 'b -> 'c 

das besagt, dass apply ist eine Funktion, die, wenn eine Funktion des Typs zugeführt ('a -> 'b -> 'c) und Argumente vom Typ 'a und 'b, ein Ergebnis vom Typ produziert 'c. Ich bin mir nicht sicher, ob apply sofort verwendet wird, obwohl es dazu dient, die Perspektive zu betonen, dass funktionale Anwendung selbst eine Funktion höherer Ordnung ist.

+0

John Coleman. Vielen Dank. Ich lerne SML und habe Schwierigkeiten, die Fortsetzung zu verstehen. Können Sie mir irgendein Tutorial oder einen anderen Weg erzählen, von dem ich mehr über die Fortsetzung erfahren kann? – user1313623

+0

Im Gegensatz zu einigen funktionalen Sprachen wie Scheme sind Fortsetzungen kein Teil von SML - obwohl verschiedene Implementierungen von SML wie SML/NJ eigene Implementierungen bereitstellen (z. B. SMLofNJ.Cont.callcc). Ich habe keinen von ihnen ausprobiert. Du könntest vielleicht eine andere Frage stellen und jemand mit Erfahrung mit ihnen könnte antworten. Bevor Sie eine weitere Frage stellen, siehe: http://stackoverflow.com/questions/28956717/what-do-continuations-mean-in-functional-programmingspecfical-sml?rq=1 –