当前位置:  开发笔记 > 开发工具 > 正文

是否可以使用WinHugs打印Haskell中的所有缩减?

如何解决《是否可以使用WinHugs打印Haskell中的所有缩减?》经验,为你挑选了2个好方法。

我编写了以下函数..并使用WinHugs执行

teneven =  [x | x <- [1..10], even x]

我的输出:

Main> teneven
[2,4,6,8,10] :: [Integer] 
(63 reductions, 102 cells)

无论如何打印所有减少..所以我可以学习WinHugs内部发生的核心评估?



1> A. Rex..:

一些想法:

    debug命令行选项(您可以:set +d在Hugs中设置)是提供信息的,但是非常详细,并没有向您显示Haskell语法的减少.

    试试Hat - Haskell Tracer.我只是尝试了一个简单的程序,它非常酷.我不在Windows上,我不知道让它运行有多困难.它可能相当困难,这是一个耻辱,因为它很酷,基本上你想要的.如果你确实在运行它,你可以从Hat获得类似这样的信息:

    main = {IO}
    teneven = [2,4,6,8,10]
    _foldr (\..) [1,2,3,4,5,6,7,8, ...] [] = [2,4,6,8,10]
    (\..) 1 [2,4,6,8,10] = [2,4,6,8,10]
    (\..) 2 [4,6,8,10] = [2,4,6,8,10]
    (\..) 3 [4,6,8,10] = [4,6,8,10]
    (\..) 4 [6,8,10] = [4,6,8,10]
    (\..) 5 [6,8,10] = [6,8,10]
    (\..) 6 [8,10] = [6,8,10]
    (\..) 7 [8,10] = [8,10]
    (\..) 8 [10] = [8,10]
    (\..) 9 [10] = [10]
    (\..) 10 [] = [10]
    

    那里有lambda even.此外,如果您愿意,Hat可以跟踪呼叫foldr和其他内部呼叫; 默认情况下,它不会这样做.



2> Juan Antonio..:

这里有一些使用Debug.Trace和Hugs.Observe的例子.

import Debug.Trace
fact :: Integer -> Integer
fact 0 = trace "fact 0 ->> 1" 1
fact n = trace ("fact " ++ show n) (n * fact (n-1))


import Hugs.Observe
fact :: Integer -> Integer
fact 0 = observe "fact 0" 1
fact n = observe "fact n" (n *  fact (n-1))

希望这可以帮助您弄清楚如何使用WinHungs打印所有减少量.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有