0
votes

Comment utiliser les éléments de la carte correspondante dans F #?

J'ai essayé de créer une fonction qui prend deux entiers A, B comme entrée et retour 5 si A = 1 b = 2 et 6 sinon, voici ce que j'ai fait:

let updateTable (t:Table, r: Result)= 
    let pointmade = pointsMade r
    match pointmade with
    |((f,Points s),(f1,Points s1))-> match Map.tryFind f t  Map.tryFind f1 t with
                                    |None, None -> t
                                    |Some Points x, Some Points y ->t .Add (f, Points s+x1) .Add(f1, Points s1+y1)

f#

3 commentaires

Vous manquez une virgule entre map.tryfind F t et map.tryfind F1 t


Merci!! En outre, qu'en est-il de l'erreur que je reçois "t .add (f, points s + x1) .add (F1, points S1 + Y1)"?


Facile, vous devez utiliser des parenthèses: points (s + x1)


3 Réponses :


1
votes

On dirait que vous confondez des arguments du tuple et du curry.

Exemples avec un seul argument tuple (parenthèse est requis). P>

Signature: int * int -> int p> xxx pré>

exemple avec deux arguments au curry: p>

Signature: INT-> INT -> INT P>

//let example3 (a: int) (b: int) = 
let example3 a b =
    match a, b with
    | 1, 2 -> 5
    | _    -> 6


0 commentaires

0
votes

Quoi qu'il en soit, le code qui fonctionne ressemble à ceci: xxx


0 commentaires

1
votes

dans votre "code de travail", dans la fonction PointsMade code> Vous n'avez pas besoin d'utiliser la correspondance de motif, vous pouvez simplement utiliser une liaison Let.

let addPoints (team: Team, Points points) (table: Table) =
    match Map.tryFind team table with
    | None            -> table
    | Some (Points p) -> Map.add team (Points (points + p)) table

let updateTable (table: Table, result: Result) =
    let pts1, pts2 = pointsMade result
    table |> addPoints pts1 |> addPoints pts2


0 commentaires