我喜欢亚历克的回答。通常当我看到这些类型的代码时,我在这些步骤中操纵它们。原代码:
add 0 = id
add x = add(x-1) . (+1)
让我们把它翻译成更简单的形式:
add :: Int -> Int -> Int
add 0 num = id num
add num1 = add (num1 - 1) . (\num2 -> num2 + 1)
更容易翻译:
add :: Int -> Int -> Int
add 0 num = id num
add num1 = \num3 -> add (num1 - 1) ((\num2 -> num2 + 1) num3)
另一个转换:
add :: Int -> Int -> Int
add 0 num = id num
add num1 = \num3 -> add (num1 - 1) (num3 + 1)
最终转化:
add :: Int -> Int -> Int
add 0 num = id num
add num1 num3 = add (num1 - 1) (num3 + 1)
.
是一个函数组合运算符。 (+1)
是一种特殊的语法 并且代表\x -> x + 1
。
是的。尽管如此,请不要编写'f(x)'样式函数应用程序,也不要编写数字参数 - 它只是让人困惑。 – leftaroundabout