如何在Haskell中编写for循环?

key*_*998 1 haskell functional-programming list

我真的对Haskell并不陌生,也对如何实现for循环感到困惑,因为我知道我们需要对它们使用递归。

例如,我有一个列表[1,2,2,4,1],想要编写一个将每个都更改2为的函数3。我将如何去做呢?在Java中,我知道我会写以下内容

public void replace_two(List<Integer> ints) {
        int i = 0;
        for (int x: ints) {
            if (x == 2) {
                ints.set(i, 3);
            }
            i++;
        }
        System.out.println(ints);
    }
Run Code Online (Sandbox Code Playgroud)

但是我不确定如何用Haskell重现其他类似内容?

Jos*_*ica 11

forHaskell中没有一个循环的替代品。替换取决于您要执行的操作。在这种情况下,a map将是合适的:

replace_two = map go
  where
    go 2 = 3
    go x = x
Run Code Online (Sandbox Code Playgroud)

它是这样的:

Prelude> replace_two [1,2,2,4,1]
[1,3,3,4,1]
Prelude>
Run Code Online (Sandbox Code Playgroud)