Haskell错误不正确的终止字符常量

时间:2017-02-24 18:27:40

标签: python haskell recursion

我正在尝试将以下代码传递给haskell,但它让我错误在haskell中错误地终止了字符常量。 python中的代码已经过测试,并且是correc

    import System.IO
    funcion x n = funcionaux x n 1
    funcionaux x n k = if(k>n) then 2*k-1 else (2*k-1)-((x**k)´div´(funcion(x,n,(k+1)))
    main = do
    x <- readLn :: IO Double
    n <- readLn :: IO Int
    putStrLn (show(funcion x n))

python代码是

    def funcion(x,n,k):
        if k > n:
            return ((2*k)-1)
        else:
            return ((2*k)-1) - ((x**k)/funcion(x, n, (k+1)))

    print(funcion(1.3,7,1)) 

3 个答案:

答案 0 :(得分:3)

你需要在div周围使用反引号(表示使用前缀函数的中缀),而不是单引号(表示字符常量,因此错误)。也就是说,您应该在`div`使用'div'

答案 1 :(得分:1)

您正在打开4个括号并关闭3。

以下是重新格式化代码的建议。我也按原样递归funcionaux

您可能需要修复更多错误,这是未经测试的。

import System.IO
funcion x n = funcionaux x n 1
funcionaux x n k = if k>n 
   then 2*k - 1 
   else 2*k - 1 - ((x**k) `div` funcionaux x n (k+1))
main = do
   x <- readLn :: IO Double
   n <- readLn :: IO Int
   putStrLn (show (funcion x n))

答案 2 :(得分:0)

嗯...... Haskell并不像python那么简单,需要深思熟虑的研究。

工作代码如下:

import System.IO

funcionaux x n k = if(k>n)
                then 2*k-1
                else (2*k-1)-((x^k) `div` (funcionaux x n (k+1)) )
main = do
 x <- readLn :: IO Int
 n <- readLn :: IO Int
 putStrLn (show (funcionaux x n 1))

还有一些说明:

  1. 对于中缀使用`operator` not&#39; operator&#39;;
  2. **和^用于不同类型;
  3. div和/也用于不同的类型;
  4. 在函数调用期间,参数传递时没有逗号;
  5. 等等。