12
votes

Différent ordre d'argument pour obtenir N-T ème élément de tableau, liste ou SEQ

Y a-t-il une bonne raison pour un ordre d'argument différent dans les fonctions d'obtention de N-ème élément du tableau, de la liste ou de la SEQ:

s |> Seq.nth n


0 commentaires

3 Réponses :


15
votes

Je ne pense pas à une bonne raison de définir array.get code> et list.nth code> de cette façon. Étant donné que la coiffeuse est très courante dans F #, ils auraient dû être définis de manière à ce que l'argument code> Source code> est devenu dernier.

En cas de list.nth code>, il ne doit pas Changez beaucoup parce que vous pouvez utiliser seq.nth code> et la complexité de temps est toujours o (n) code> où n code> est la longueur de la liste: p >

[1..100] |> flip List.nth 10
[|1..100|] |> flip Array.get 10


0 commentaires

7
votes

Il suffit d'utiliser un opérateur de tuyau arrière: xxx

puisque les deux opérateurs sont laissés associatifs, x |> f <| y est analysé comme (x |> f) <| y , et cela fait le truc.

Opérateur de tuyau arrière est également utile si vous souhaitez supprimer des parenthèses: f (très longue expression) peut être remplacé par < code> f <| Expression très longue .


3 commentaires

Cela fait l'affaire, mais je n'aime pas sa lisibilité - très claustrophobe!


@Pauljurczak Absolument, c'est plutôt une question de style. Personnellement, j'adore les opérateurs, mais ils ont naturellement limitations en F #, c'est donc un choix entre flip , méthodes d'extension et <| . Il semble qu'il n'y ait pas de meilleure idée.


+1 pas et defaultarg m'a mis habitué à utiliser <| ; Cela ne semble pas si maladroit une fois que vous vous y êtes habitué.



5
votes

Depuis que Pad et Bytebuster répondit à votre dernière question que je me concentrerai sur la question des ans.

Ceci est basé sur mes connaissances actuelles et non des faits historiques.

Depuis F # dérivé d'OCAML et OCAML a Array et Liste mais Not SEQ et F # utilise |> Pour une pipeline naturelle et Vérification de type et OCAML manque d'opérateur de pipeline , les auteurs de F # ont fait le commutateur pour SEQ. Mais évidemment être une compablie en arrière avec Ocaml, ils n'ont pas tout changé.


1 commentaires

La théorie du patrimoine OCAML a beaucoup de sens.