gpt4 book ai didi

haskell - 循环编程 - 用最小值替换列表元素

转载 作者:行者123 更新时间:2023-12-04 13:13:25 25 4
gpt4 key购买 nike

我刚刚阅读了this article关于 circular programming .这对我来说似乎很陌生。尽管我可以将反馈想象为延迟评估的 thunk,稍后将评估为所需的结果,但我无法理解它。所以我决定编写一个函数,用它的最小值替换列表的每个元素。

trace :: (a -> c -> (b,c)) -> a -> b
trace f a = b
where (b,c) = f a c

repminList :: (Num a, Ord a) => [a] -> [a]
repminList = trace repIIminList

repIIminList [x] m = ([m], x)
repIIminList (a:as) m = let (replaced, m) = repIIminList as m
in (m : replaced, min a m)

但是 repminList [1,2,3]等于 [2,3,3] .什么是正确的版本?

最佳答案

你的问题是你有两个不同的 m变量和一个阴影在另一个上,因此您根本不会使用实际的循环变量。这是您的 repIIminList 的固定版本:

repIIminList [x] m = ([m], x)
repIIminList (a:as) m = let (replaced, m') = repIIminList as m
in (m : replaced, min a m')

这里 m是您作为循环参数接收的列表的最后一个最小元素。 m'从对 repIIminList 的递归调用返回是迄今为止看到的最小值,因此将最终的最小值(即 m )附加到结果列表然后通过返回 min a m' 更新当前最小值很重要.

关于haskell - 循环编程 - 用最小值替换列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29226483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com