F # Дополнительный параметр List.map - PullRequest
2 голосов
/ 09 апреля 2020

У меня большие проблемы с запуском функции List.map. У меня есть список кортежей:

let list = [
    (1, "a"),
    (2, "b"),
    (3, "c")
]

Я хочу использовать его здесь:

let FooBar (x: int) =
    list |> List.map (fun (num, word) number -> if number % num = 0 then word else "") x 
    |> String.concat "" wordList

Но я не могу заставить это работать. Мне нужны все три параметра (номер + слово каждой записи списка и х) внутри функции. Я рад любым советам и подсказкам

Получилось так:

let list = [
    (1, "a");
    (2, "b");
    (3, "c")
]

let convert (number: int) = 
    let wordList = List.map (fun (num, word) -> if number % num = 0 then word else "") numWord

1 Ответ

3 голосов
/ 09 апреля 2020

Определение вашей проекции здесь: (fun (num, word) -> >do sth<). x стоит снаружи и, таким образом, рассматривается как параметр для List.map. Просто измените свой код следующим образом: (fun (num, word) -> num, word, x). Это дало бы вам проекцию, которая берет некоторую пару (num, word) и отображает ее в триплет (num, word, x).

Вот немного более элегантный способ:

let enrich z (x, y) = x, y, z
let fooBar x = List.map (enrich x)
...