如何在我的`reverse`版本中在另一个函数中本地定义一个函数-获取解析错误

时间:2019-04-03 14:05:35

标签: haskell

我已经开始研究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'

我知道这是一个基本问题,也是更基本的解决方案,但是我不明白...请帮助我!

1 个答案:

答案 0 :(得分:2)

使用let添加定义时,您希望将定义放在letin之间。

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)