L'operatore di composizione o
(ad esempio val x = foo o bar
, dove foo
e bar
sono entrambe funzioni), utilizzabili solo su funzioni a argomento singolo e/o funzioni con un numero uguale di argomenti? In caso contrario, qual è la sintassi per, per esempio, componendo foo(x,y)
con bar(x)
.L'operatore SML `o` è utile solo per le funzioni a argomento singolo?
risposta
Come già detto, sì, SML ha solo funzioni a singolo argomento. Voglio elaborare un po ', però.
La seguente funzione:
fun foo (x,y) = x + y
ha il tipo:
fn : int * int -> int
Il che significa che il primo argomento è una tupla di due interi. Così si potrebbe fare qualcosa di simile:
(sign o foo) (4,~5)
che darebbe lo stesso sign (foo (4,~5))
.
Ok, ma che dire di qualcosa del genere?
fun bar x y = x + y
Essa ha il tipo:
fn : int -> int -> int
che significa che barra ha effettivamente solo ad un numero intero, e restituisce una funzione. Quindi non puoi fare ciò:
(sign o bar) 4 ~5
Perché la barra restituisce una funzione e il segno prende un numero intero. È possibile fare questo, però:
(sign o bar 4) ~5
Perché bar 4
è una funzione che aggiunge 4 ad un numero.
SML ha solo funzioni a singolo argomento; foo(x,y)
è una funzione foo
che prende un singolo argomento, la tupla (x, y)
. Pertanto, non è necessaria alcuna gestione speciale e bar(x)
dovrà restituire una tupla del tipo appropriato per comporla con foo
.
Ho visto alcuni codici ML standard (in particolare il codice Poly/ML Isabelle/Pure) che mette operatori di composizione aggiuntivi nell'ambiente di livello superiore che gestiscono questo tipo di situazione. Es .:
fun (f oo g) x y = f (g x y)
fun (f ooo g) x y z = f (g x y z)
fun (f oooo g) x y z w = f (g x y z w)
In generale, queste cose dovrebbero essere usati con parsimonia (quattro o più o di sta ottenendo un po 'stupido), ma è molto utile avere almeno oo
intorno.
- 1. Pointfree (o libreria) per applicare due funzioni a singolo ingresso
- 2. Il secondo argomento di `respond_to_missing?` È utile per qualcosa?
- 3. Funzioni di ordinamento standard in SML?
- 4. È utile per le applicazioni di produzione?
- 5. Gestire una lista o un singolo numero come argomento
- 6. Un argomento, molte funzioni
- 7. Come definire i tipi di argomento per le funzioni R?
- 8. istanza di clojure? argomento singolo
- 9. RExcel è utile? o dovrei cercare alternative
- 10. SML - variabile non legato o costruttore
- 11. Funzioni multiple in un singolo tocco o istruzione aggregata
- 12. È stato sempre utile?
- 13. Perché match.call è utile?
- 14. Quando è utile __proto__?
- 15. Quale è più utile a livello di assembly, 64 registri o tre istruzioni per l'operando?
- 16. Perché è utile Monnal Identity?
- 17. Come scrivere le funzioni reciprocamente ricorsive all'interno di un binding let in SML?
- 18. Esportare le funzioni da dll solo ordinale
- 19. È utile avere un DatabaseManager con tutte le funzioni di tutti gli oggetti del modello?
- 20. Cassandra è utile per archiviare i file?
- 21. Stampa solo output di stampa con SML/NJ
- 22. Come esporre SOLO le funzioni rapide per objc
- 23. Perché le funzioni incorporate di PHP utilizzano le costanti anziché solo le stringhe come parametri?
- 24. R: Trova le variabili in dotazione per le funzioni con il '...' argomento con exists()
- 25. PyWinAuto è ancora utile?
- 26. -Wextra quanto è veramente utile?
- 27. Qual è la posizione: utile per?
- 28. DisconnectedContext MDA quando si chiamano le funzioni WMI nell'applicazione a thread singolo
- 29. Typecasting in SML
- 30. È utile il guadagno?
Molto utile. Molte grazie! – GregT
Se hai definito una funzione 'uncurry' per facilitare il tuo ultimo" problema "con' sign o bar', ed eventualmente anche una funzione 'flip' che può capovolgere l'ordine degli argomenti capovolgendo la coppia' (x, y) ' a '(y, x)', ecc. –
Jesper: In questo caso, probabilmente definirei un operatore $ e fare 'firmare $ bar xy'. – Tayacan