小编Und*_*ant的帖子

是否可以在Rust中进行递归闭包?

这是一个非常简单的例子,但我将如何做类似的事情:

let fact = |x: u32| {
    match x {
        0 => 1,
        _ => x * fact(x - 1),
    }
};
Run Code Online (Sandbox Code Playgroud)

我知道这个具体的例子可以通过迭代轻松完成,但我想知道是否可以在Rust中为更复杂的事情(例如遍历树)创建一个递归函数,或者我是否需要使用我自己的堆栈代替.

recursion closures rust

33
推荐指数
3
解决办法
7844
查看次数

Haskell - 从无限列表中获取多个值而不启动列表

我正在研究Project Euler问题40的实现,并且我试图弄清楚如何从Haskell中的列表中取出多个项目而不启动列表.

目前,我有一个champernowne类型列表Integral a => [a],它将返回一个无限的Champernowne常数数字列表,然后我从这个序列中取出第一个,第十个等术语并乘以得到答案.实际代码是:

ans = (product . map (champernowne !!)) [0, 9, 99, 999, 9999, 99999]
Run Code Online (Sandbox Code Playgroud)

这个实现的问题是(我假设)每次想要获得一个新术语时,Haskell将从序列的开头经过列表.我怎样才能使haskell只经历从元素1到1 000 000的序列,然后将这些术语从中间拉出来?我已经尝试过scanl,希望懒惰的评估可以帮助我,但它没有:

ans = (product . head . scanl (flip drop) champernowne) [10, 90, 900, 9000, 90000]
Run Code Online (Sandbox Code Playgroud)

只是为了澄清,第一部分代码确实有效,但我正在努力提高我的实现效率.

haskell list lazy-evaluation

4
推荐指数
1
解决办法
797
查看次数

匿名联合是否可以在结构中别名成员变量?

假设我有以下C++代码:

struct something
{
  // ...
  union { int size, length; };
  // ...
};
Run Code Online (Sandbox Code Playgroud)

这将创建两个struct访问相同值的成员:sizelength.

将两个成员视为完整别名(即设置大小,然后访问长度,反之亦然)是不确定的行为?是否有一种"更好"的方式来实现这种行为,或者这是一种可接受的实现方式?

c++ struct unions

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

标签 统计

c++ ×1

closures ×1

haskell ×1

lazy-evaluation ×1

list ×1

recursion ×1

rust ×1

struct ×1

unions ×1