例如。如果您有函数 (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;;
我试过“何时”语句,但无济于事。
最佳答案
安 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
关于list - 如何将函数仅映射到列表中的某些元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8517534/