小编Gab*_*elG的帖子

我的重写折叠功能是否已优化?

我刚刚在2天前创建了Haskell,所以我还不确定如何优化我的代码.

作为练习,我已经改写foldlfoldr(我会给foldl这里却foldr是一样的,更换lastheadinittail).

代码是:

module Main where

    myFoldl :: ( a -> ( b -> a ) ) -> a -> ( [b] -> a )

    myFoldl func = ( \x -> (\theList
        -> if (length theList == 0) then
            x
        else
            myFoldl func (func x (last theList) ) (init theList)
        ) )
Run Code Online (Sandbox Code Playgroud)

我唯一关心的是我怀疑Haskell不能在这里应用尾调用优化,因为递归调用不是在函数结束时进行的.

如何优化尾调用?Haskell的内置foldl实现是否与我的实现方式不同?

haskell tail-call-optimization

7
推荐指数
2
解决办法
1757
查看次数

Haskell:难以将上下文(Eq a)嵌入到数据声明中

我在以下程序中编写一个简单的哈希树结构hash_lookup.hs:

module Main where

    data (Eq a) => HashTable a b = HashChildren (a, [HashTable a b]) | Hash (a, b) deriving (Show)

    getKey :: HashTable a b -> a

    getKey (HashChildren (k, hs)) = k
    getKey (Hash (k, h)) = k

    lookUp :: [a] -> HashTable a b -> Maybe (HashTable a b)

    lookUp [] table = return table
    lookUp _ (Hash _) = Nothing
    lookUp (p:path) (HashChildren (_, ts) ) = lookUp path ( head ( …
Run Code Online (Sandbox Code Playgroud)

haskell

6
推荐指数
1
解决办法
218
查看次数

标签 统计

haskell ×2

tail-call-optimization ×1