Est-il possible d'imprimer la liste complète sans utiliser cycle? J'ai essayé:
Console.WriteLine([1;2;3;4;5])
et il n’imprime que trois premiers éléments:
[1;2;3; ... ]
Si vous souhaitez utiliser le moteur de formatage F # intégré (et éviter d'implémenter vous-même la même chose), vous pouvez utiliser les fonctions d'impression F # telles que printfn
. Vous pouvez lui donner un spécificateur de format pour imprimer une liste complète (en utilisant le formatage F #) ou seulement quelques premiers éléments (ce qui se produit lorsque vous appelez ToString
):
> printfn "%A" [ 1 .. 5 ];; // Full list using F# formatting
[1; 2; 3; 4; 5]
> printfn "%O" [ 1 .. 5 ];; // Using ToString (same as WriteLine)
[1; 2; 3; ... ]
Si vous souhaitez utiliser Console.WriteLine
(ou une autre méthode .NET) pour une raison quelconque, vous pouvez également utiliser sprintf
qui se comporte de la même manière que printf
, mais renvoie la chaîne mise en forme comme résultat:
Console.WriteLine(sprintf "%A" list)
L’utilisation de printf
ou sprintf
présente l’avantage de traiter automatiquement les autres types de caractères F # (par exemple, si vous avez une liste contenant des nuplets, des unions discriminées ou des enregistrements).
Non, il n'est pas possible d'imprimer le contenu d'une liste F # sans utiliser un cycle/une boucle. Pour imprimer chaque élément, vous devez énumérer chacun d’eux.
En F # bien que cela n’ait pas besoin d’être fait avec une boucle, mais plutôt avec une opération Nice pipe
[1;2;3;4;5] |> Seq.iter (fun x -> printf "%d " x)
Et comme Juliet l'a souligné, je pourrais simplifier cela davantage avec une application partielle
[1;2;3;4;5] |> Seq.iter (printf "%d ")
En général, si vous souhaitez modifier de manière graphique "% A" de vos objets de manière à afficher les valeurs de votre type dans fsi.exe, vous pouvez appliquer l'attribut StructuredFormatDisplayAttribute à votre type:
[<StructuredFormatDisplayAttribute("PP {PrettyPrinter}")>]
type Foo(a:string array) =
let pp = Array.mapi (fun i (s: string) -> sprintf "{idx: %d len: %d contents: '%s'}" i s.Length s) a
member x.PrettyPrinter = pp
> let foo = Foo [|"one";"two";"three"|];;
val foo : Foo =
PP [|"{idx: 0 len: 3 contents: 'one'}"; "{idx: 1 len: 3 contents: 'two'}";
"{idx: 2 len: 5 contents: 'three'}"|]
> printfn "%A" foo;;
PP [|"{idx: 0 len: 3 contents: 'one'}"; "{idx: 1 len: 3 contents: 'two'}";
"{idx: 2 len: 5 contents: 'three'}"|]
val it : unit = ()
Une façon peut-être plus fonctionnelle de le faire:
let nums = [1;2;3;4;5;6]
let concat acc x = acc + " " + (string x)
let full_list = List.fold concat "" nums
printfn "%s" full_list