相关疑难解决方法(0)

非平凡的懒惰评估

我正在消化这个精彩的演示文稿为什么要学习Haskell?作者:Keegan McAllister.他在那里使用了片段

minimum = head . sort
Run Code Online (Sandbox Code Playgroud)

作为Haskell懒惰评估的一个例子,说明在Haskell中minimum时间复杂度 O(n).但是,我认为这个例子具有学术性质.因此,我要求一个更实际的例子,即大多数中间计算都被抛弃,这并不是显而易见的.

haskell lazy-evaluation time-complexity

32
推荐指数
3
解决办法
2906
查看次数

这种实现合并排序好吗?

我刚刚开始学习Haskell,我之前从未使用过函数式编程语言.我只是想知道合并排序的实现是好还是坏,究竟是好还是坏.也许它甚至是错的 - 它确实排序但是算法可能不是我想的合并排序.

告诉我在这里可以改进的一切.我自己认为它是一个非常清晰和简单的实现.谢谢你的建议,这里是代码:)

merge [] ys = ys
merge xs [] = xs
merge xs ys =  sorted : merge left right
                where 
                    sorted = if head(xs) < head(ys) then head(xs) else head(ys)
                    left = if head(xs) <= head(ys) then tail(xs) else xs
                    right = if head(xs) > head(ys) then tail(ys) else ys

msort [] = []
msort [x] = [x]
msort xs = merge (msort left) (msort right)
            where 
                left = take (div (length xs) 2) xs
                right …
Run Code Online (Sandbox Code Playgroud)

sorting merge mergesort haskell

7
推荐指数
1
解决办法
612
查看次数

如何使用Python dict获得班上排名前10位的学生

我有一个带有学生姓名和标记的字典

dict1 = {'name1': 34, 'name2':45, 'name3': 98, 'name4':34, 'name5': 66}
Run Code Online (Sandbox Code Playgroud)

我希望获得前10名学生的名字以及上述词汇中的分数.

结果:

name3 98
name5 66
name2 45
name1 34
name4 34
Run Code Online (Sandbox Code Playgroud)

如果多个键具有相同的值,则键必须按字母顺序排列(例如:name1和name4按字母顺序排列,相同值为34)

如何完成它?

python dictionary

3
推荐指数
2
解决办法
9597
查看次数

这个Haskell示例是否有效地展示了懒惰?

我是Haskell的新手,我正在为我的Programming Languages课写一篇论文.我想用一些示例代码演示Haskell的懒惰,但我不确定我所看到的是否实际上是懒惰.

doubleMe xs = [x*2 | x <- xs]
Run Code Online (Sandbox Code Playgroud)

在ghci:

let xs = [1..10]
import Debug.Trace
trace (show lst) doubleMe (trace (show lst) doubleMe (trace (show lst) doubleMe(lst)))
Run Code Online (Sandbox Code Playgroud)

输出:

[1,2,3,4,5,6,7,8,9,10]
[1,2,3,4,5,6,7,8,9,10]
[1,2,3,4,5,6,7,8,9,10]
[8,16,24,32,40,48,56,64,72,80]
Run Code Online (Sandbox Code Playgroud)

感谢您的时间和帮助!

haskell lazy-evaluation

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