如何将函数映射到列表中的某些元素?

Asp*_*pen 3 ocaml functional-programming if-statement list map

例如,如果您有一个功能,(fun x -> x+1)并且您想将其映射到[1; 2; 3].但是你只想将它映射到x=1,以便输出[2; 2; 3].你怎么做到这一点?

使用OCaml,我试过:

let rec foo (input : int list) : int list =
match input with
    | [] -> []
    | hd::tl -> List.map (fun x -> if x=1 then (x+1)) input;;
Run Code Online (Sandbox Code Playgroud)

而且我试过'何时'的陈述,但无济于事.

pad*_*pad 9

else这里缺少一个分支.

你快到了.你只需要制作一个完整的if/else语句:

if x=1 then (x+1) else x

OCaml需要在上面表达式的任何分支上返回值.

需要明确的是,when防护在这里是无关紧要的,因为它用于条件模式匹配.由于在这种情况下模式匹配是多余的,因此您的功能可能会缩短很多:

let foo input =
    List.map (fun x -> if x=1 then x+1 else x) input
Run Code Online (Sandbox Code Playgroud)