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

标签 list map if-statement functional-programming ocaml

例如。如果您有函数 (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/

相关文章:

python - 如何访问包含字典中特定项目的列表?

python - 如何根据另一个包含通配符的列表过滤列表?

c++ - 我如何找出 std::map 方法可以抛出哪些异常?

java - 在 IF 语句中定义变量 (Java)

python - 显示 "if any"检测到的列表元素

css - CSS "see"能走多远

java - 在 Java 中创建 map

使用 Fluent NHibernate 设置类映射

java - feed方法java if语句

python - 在字典 switch 语句中模拟 'else'