我已经开始研究Haskell,我尝试编写一个“反向”函数。 我为此创建了2个函数,它们可以工作,但是现在我想在第二个函数中本地定义一个函数,但是出现语法错误。这是我在做什么:
let liste1 = [4,2,8,1,7,12]
-- I create a random list
test(x,y)= if x==[] then y else test(tail(x),head(x):y)
-- take a 2 list, with y=[] to have a list memory
inverse(x)=test(x,[])
-- and finally, to have only 1 parameter
然后,我们有:
> inverse(liste1)
[12,7,1,8,2,4]
有效!太神奇了!
现在,我想以 LOCAL 功能进行测试。到目前为止,这是我尝试过的:
inverse(x) = let test(x,[]) in if x==[] then y else test(tail(x),head(x):y)
和
inverse(x) = let if x==[] then y else test(tail(x),head(x):y) in test(x,[])
两种方法都不起作用,并且出现以下错误:parse error on input ìn'
我知道这是一个基本问题,也是更基本的解决方案,但是我不明白...请帮助我!
答案 0 :(得分:2)
使用let
添加定义时,您希望将定义放在let
和in
之间。
inverse(x) =
let test(x,y) = if x==[] then y else test(tail(x),head(x):y)
in test(x,[])
您可以改用where
来定义以下内容:
inverse(x) = test(x,[])
where test(x,y) = if x==[] then y else test(tail(x),head(x):y)