F # le permite convertir operadores en funciones rodeándolos con (
)
: por ejemplo, (+)
es del tipo int -> int -> int
.Usar lista contra operadores (a :: b) como una función
¿Es posible hacer esto con el operador de listas contra, ::
?
No se comporta como un operador binario normales:
FSI> (::);;
(::);;
-^^
c:\temp\stdin(3,2): error FS0010: Unexpected symbol '::' in expression.
Expected ')' or other token.
Y el método List.Cons
toma una tupla; no es curry
(Es útil poder hacer esto. Por ejemplo, puede usarlo para implementar map in terms of fold).
¿No puedes escribir un pequeño contenedor alrededor de '::' o 'List.Cons'? – leppie
Ookay, esto es realmente extraño. Puedes simplemente 'divertir x y -> x :: y' pero no tengo idea de por qué hay una inconsistencia tan inconsistente. ¿Tal vez porque '::' se puede usar en emparejamientos de patrones y se trata de manera especial? Pero eso aún no sería razón. – Dario
Interesante pregunta. Esto funciona para el pensamiento concat '(@)'. – Stringer