“不在范围内:'跟踪”是什么意思,我该如何解决?

飞鲸

我正在尝试运行程序,但是我总是在终端fib3.hs:3:12中得到它:不在范围内:'trace',我不知道这是什么意思,或者我该如何解决。我是Ver的初学者,并且Haskell ...我的代码

-- fib3.hs
fib   :: Integer -> Integer -> Integer
fib d n |  trace (shift d ++ "Call: fib " ++ show n)
                     False = 0
fib _ 0 = 0
fib _ 1 = 1
fib d n = fib (d+1) (n-1)
          + fib (d+1) (n-2)

shift :: Integer -> String
shift 0 = ""
shift n =  "   " ++ shift (n-1)
卡斯滕

错误告诉您Haskell无法找到该函数trace-问题是,它不在序言中,而是在Debug.Trace模块中,因此您必须导入它。

最简单的方法是添加

import Debug.Trace 

低于您的module定义(如果有的话-如果不仅在文件的顶部,还吹了一些{-# LANGUAGE ... #-}杂物(如果有的话))

这将导入的一切,从Debug.Trace我个人不喜欢(这是很难找出一个函数这样定义) -这就是为什么我通常喜欢只导入所需的功能和定义(所以我可以告诉他们是从哪里来的) 像这样:

import Debug.Trace (trace)

因此,解决您的问题的方法可能如下所示:

module MyFibModule where

import Debug.Trace (trace)

-- fib3.hs
fib   :: Integer -> Integer -> Integer
fib d n |  trace (shift d ++ "Call: fib " ++ show n)
                     False = 0
fib _ 0 = 0
fib _ 1 = 1
fib d n = fib (d+1) (n-1)
          + fib (d+1) (n-2)

shift :: Integer -> String
shift 0 = ""
shift n =  "   " ++ shift (n-1)

...

λ> fib 1 4
   Call: fib 4
      Call: fib 2
         Call: fib 0
         Call: fib 1
      Call: fib 3
         Call: fib 1
         Call: fib 2
            Call: fib 0
            Call: fib 1
3

其余的不在主题范围内,但您可能会感兴趣:

轻微重写

我将其重写为:

fib   :: Integer -> Integer -> Integer
fib d 0 = traceIt d 0 $ 0
fib d 1 = traceIt d 1 $ 1
fib d n = traceIt d n $ fib (d+1) (n-1) + fib (d+1) (n-2)

traceIt :: Integer -> Integer -> a -> a
traceIt d n = trace (shift d ++ "Call: fib " ++ show n)

shift :: Integer -> String
shift 0 = ""
shift n =  "   " ++ shift (n-1)

后卫-似乎有太多的神奇IMO(我明明完全错过在第一:(点...所以你决定:我是愚蠢的或者是代码晦涩难懂的阅读?)

不想重复太多

如果您不喜欢这样,则必须在所有位置加上前缀traceIt d n(很讨厌),您可以使用来修复递归trace

fib :: Integer -> Integer
fib = fib' 0

fib' :: Integer -> Integer -> Integer
fib' d n = traceIt d n $ fibF (fib' (d+1)) n

fibF :: (Integer -> Integer) -> Integer -> Integer
fibF _ 0 = 0
fibF _ 1 = 1
fibF f n = f (n-1) + f (n-2)

traceIt :: Integer -> Integer -> a -> a
traceIt d n = trace (shift d ++ "Call: fib " ++ show n)

例子

λ> fib 4
Call: fib 4
   Call: fib 2
      Call: fib 0
      Call: fib 1
   Call: fib 3
      Call: fib 1
      Call: fib 2
         Call: fib 0
         Call: fib 1
3

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

不在范围内:readMaybe,我应该导入哪个库?

来自分类Dev

Haskell'showInt'不在范围内:为什么不呢?

来自分类Dev

为什么会收到“不在范围内”异常消息?

来自分类Dev

Dapper / EF-当变量不在使用范围内时,为什么性能会提高

来自分类Dev

为什么这不在React形式的onSubmit函数范围内?

来自分类Dev

“不在范围内:'跟踪”是什么意思,我该如何解决?

来自分类Dev

为什么通配符类型参数不在自引用类型的包装器范围内

来自分类Dev

如何解决“ RangeError(索引):无效值:不在0..13范围内,包括14)

来自分类Dev

我用let声明了我的变量,但它仍然不在全局范围内

来自分类Dev

如何解决“变量不在范围内”错误?

来自分类Dev

不在范围内:<*>

来自分类Dev

不在范围内

来自分类Dev

为什么if语句不在全局范围内寻找变量

来自分类Dev

列表框显示不在该范围内的日期

来自分类Dev

您能告诉我为什么这些方法不在范围内吗?

来自分类Dev

为什么会收到“不在范围内”异常消息?

来自分类Dev

为什么项目不在视图范围内?

来自分类Dev

getEvents()返回不在我正在寻找的时间范围内的事件

来自分类Dev

变量不在范围内(我认为),但不确定如何修复

来自分类Dev

我收到“不在范围内的SortOn”错误消息

来自分类Dev

Netstat显示IP不在我们内部范围内-安全问题?

来自分类Dev

`image`不在我指定的范围内显示矩阵

来自分类Dev

为什么这不在范围内?为什么要使用严格阻止呢?

来自分类Dev

为什么我的oracle日期字段不在查询范围内?

来自分类Dev

为什么 d3.scale Quantize 不在我的连续范围内生成离散值

来自分类Dev

搜索特定列中的一系列数字并隐藏不在该范围内的行

来自分类Dev

如果我不在范围内,如何添加 wifi 连接

来自分类Dev

如果观察值不在相邻列的特定日期范围内,我希望消除它们

来自分类Dev

为什么“变量不在范围内”

Related 相关文章

  1. 1

    不在范围内:readMaybe,我应该导入哪个库?

  2. 2

    Haskell'showInt'不在范围内:为什么不呢?

  3. 3

    为什么会收到“不在范围内”异常消息?

  4. 4

    Dapper / EF-当变量不在使用范围内时,为什么性能会提高

  5. 5

    为什么这不在React形式的onSubmit函数范围内?

  6. 6

    “不在范围内:'跟踪”是什么意思,我该如何解决?

  7. 7

    为什么通配符类型参数不在自引用类型的包装器范围内

  8. 8

    如何解决“ RangeError(索引):无效值:不在0..13范围内,包括14)

  9. 9

    我用let声明了我的变量,但它仍然不在全局范围内

  10. 10

    如何解决“变量不在范围内”错误?

  11. 11

    不在范围内:<*>

  12. 12

    不在范围内

  13. 13

    为什么if语句不在全局范围内寻找变量

  14. 14

    列表框显示不在该范围内的日期

  15. 15

    您能告诉我为什么这些方法不在范围内吗?

  16. 16

    为什么会收到“不在范围内”异常消息?

  17. 17

    为什么项目不在视图范围内?

  18. 18

    getEvents()返回不在我正在寻找的时间范围内的事件

  19. 19

    变量不在范围内(我认为),但不确定如何修复

  20. 20

    我收到“不在范围内的SortOn”错误消息

  21. 21

    Netstat显示IP不在我们内部范围内-安全问题?

  22. 22

    `image`不在我指定的范围内显示矩阵

  23. 23

    为什么这不在范围内?为什么要使用严格阻止呢?

  24. 24

    为什么我的oracle日期字段不在查询范围内?

  25. 25

    为什么 d3.scale Quantize 不在我的连续范围内生成离散值

  26. 26

    搜索特定列中的一系列数字并隐藏不在该范围内的行

  27. 27

    如果我不在范围内,如何添加 wifi 连接

  28. 28

    如果观察值不在相邻列的特定日期范围内,我希望消除它们

  29. 29

    为什么“变量不在范围内”

热门标签

归档