open System let repeat action count = for i in 1..count do action let print = printfn "Test" repeat print 10Da como resultado que "Prueba" se imprima solo una vez. ¿Cómo se debe escribir para imprimir 10 veces? Si el 10 no se usa actualmente, ¿por qué no hay advertencias?
El problema es que no está definiendo print como una función sino como un valor constante.
Las funciones deben tomar al menos un parámetro de unit :
open System let repeat action count = for i in 1..count do action () let print () = printfn "Test" repeat print 10 En su código original, el efecto secundario de imprimir ocurre solo una vez, en la definición de print .
Y no hay advertencias ya que se usa print , pero su valor es () , que es el valor devuelto por la llamada a la printfn "test" .
let print = printfn "Test" Este es un enlace. Significa que la variable print se asigna al resultado de la ejecución de printfn "Test" . El resultado de la ejecución de printfnt "Test" es una unidad () , lo que lleva a la siguiente situación: print es igual a unit
En su ciclo, simplemente devuelve la unidad con cada iteración, sin llamar a nada.
Para obtener los resultados deseados, debe cambiar el enlace a una función:
open System let repeat action count = for i in 1..count do action() let print() = printfn "Test" repeat print 10