Für (int -> int) -> int = <fun>
kann der entsprechende Ausdruck fun x -> (x 1) + 1
sein.
Ist es möglich, einen Ausdruck mit int -> (int -> int) = <fun>
Typ zu haben? Wenn nicht, warum?Ist es möglich, einen Ausdruck mit dem Typ "int -> (int -> int) = <fun>" zu haben?
Antwort
Ist es möglich, einen Ausdruck mit
int -> (int -> int)
Typ haben?
Weil ->
ist rechtsassoziativ, die Art int -> (int -> int)
= int -> int -> int
, obwohl die Klammern angedeutet sind. Die Funktion, nach der Sie suchen, ist eine einfache Curry-Funktion, die zwei Argumente benötigt, z.
let f x y = x + y
Ja, natürlich. Sie müssen nur eine Funktion als Wert zurückgeben. Zum Beispiel:
let f j = fun i -> j + i;;
val f : int -> int -> int = <fun>
f 1;;
- : int -> int = <fun>
(f 1) 2;;
- : int = 3
Keine verwandte Frage, aber sollen utop und toplevel in diesem Fall keine Klammern setzen wie nach der Auswertung von 'fun x -> (x 1) + 1'? – alr
@AlexanderRevyakin Der Toplevel verwendet die Regel, dass der Pfeil ('->') in den Typen rechts assoziert, und spart unnötige Klammern. –
- 1. Typ "Int -> Bool", "Int-> Bool -> Int", "Int-> String -> Int-> Bool"
- 2. Wie konvertiert man einen Vektor <pair <int,int>> zu multimap <int,int> effizient?
- 3. Wie ungeordet_set <Tupel <int,int>>?
- 4. Sortierliste <Tupel <int, int>> in-place
- 5. unique_ptr <int[]> oder Vektor <int>?
- 6. Liste Umwandlung <int> in int []
- 7. Karte <int,int> Standardwerte
- 8. f # - Dieser Ausdruck sollte int haben, aber hier ist der Typ 'a -> int
- 9. Zuweisen von std :: function <int(int)> zu std :: function <const int & (const int & x)>
- 10. Typ Prüfung auf Nullable <int>
- 11. Was ist äquivalent zu map <int, vector <int>> in Python?
- 12. Konvertieren Bereich <Int> zu Bereich <String.Index>
- 13. welche Besetzung ist schneller static_cast <int>() oder int()
- 14. konvertieren Dictionary <int, Enumerable> zu Dictionary <int, Enumerable> invertieren Inhalt
- 15. C++: Paar <vector<int>, Vektor <int>> p;
- 16. Ist int-> double-> int garantiert werthaltig?
- 17. Wie erstellt man Ausdruck <Func <TSource, bool> durch Vergleichen von Func <TSource, int> mit int
- 18. Vektor <const int> ist nicht erlaubt. Warum ist das Paar <const int, int> erlaubt?
- 19. Indizierung IQueryable <int>?
- 20. Liste erstellen <int> STIL mit
- 21. Liste <int> zu IEnumerable <IComparable>
- 22. Typ int * (*) (int *, int * (*)())
- 23. Fehler: keine Übereinstimmung für 'operator []' (Operandentypen sind 'std :: list <std :: pair <int, int>> *' und 'std :: pair <int, int>')
- 24. von var Umwandlung <String,int>
- 25. Was ist der Unterschied in der Leistung von Std :: Set <Paar <int,int>> und Std :: Map <int,int>
- 26. Hinzufügen von Elementen zu einem Dictionary <Int, Liste <int>>
- 27. Ist es C++ -Standard-konform, eine Variable mit `A <int> :: template B <int> x;` zu definieren?
- 28. C# Linq Abfrage zurückgeben Wörterbuch <int,int[]>
- 29. Fill Liste <int> mit LINQ
- 30. Rundung mit static_cast <int>?
Streng genommen 'int -> (int -> int) =' kein Typ ist, nur die 'int -> (int -> int)' Teil. Der '= ' Teil ist, wie ein Toplevel den" Wert "einer Funktion ausgibt. Zum Beispiel, nach der Auswertung von '1 + 1 ;;' utop wird '-: int = 2 'ausgeben, wobei' int 'der Typ des Ausdrucks und der Teil nach' = 'sein Wert ist. –