小编sa_*_*___的帖子

Haskell函数用于列表长度

要使用foldr计算列表的长度,可以执行以下操作:

foldr (\_ acc -> acc + 1) 0
Run Code Online (Sandbox Code Playgroud)

进一步扩展折叠函数需要增加第二个参数的想法,我想出了这个(这是错误的):

foldr ((+1) . (flip const)) 0`
Run Code Online (Sandbox Code Playgroud)

进一步检查该类型揭示了这一点:

(+1) . (flip const) :: Num (c -> c) => a -> c -> c
Run Code Online (Sandbox Code Playgroud)

Haskell高阶函数计算长度 在该页面上有一个有趣的评论,我真的无法理解

foldr (((+1).).(flip const)) 0
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下这个组合是如何运作的吗?

haskell fold

8
推荐指数
1
解决办法
903
查看次数

为什么 IntoIterator trait 需要显式指定关联类型 Item?

由于相关类型IntoIter的的IntoIterator特点,实现了Iterator特质,是不是有足够的推断关联的类型Item

iterator traits rust

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

Erlang Meck:如何只模拟特定的函数子句?

给一个带有多个子句的函数,我想只模拟一个特定的情况,并且对于否则会导致'function_clause'错误的每个其他输入,我想让它由原始函数处理.它几乎就像是erlang meck中的选择性passthrough.

erlang meck

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

Sum newtype 对非数字类型有意义吗?

这就是 Sum 当前的定义方式。

newtype Sum a = Sum {getSum :: a}

有没有人有例子说明它在数字上下文之外如何有用?如果不是,那么我们为什么不在定义 newtype 时将 the约束a为 beNum a呢?为什么会有人想要定义 aSum "hello"呢?

haskell newtype

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

切片与数组的比较如何在Rust中工作?

为什么甚至[1,1] == &[1,1]不编译(可能是因为它们是不同的类型),但下面的代码片段编译并运行正常.

let a: [i32; 100] = [1; 100];
let b: &[i32] = &a[1..3];
if b == [1, 1] { // comparison with &[1, 1] works as well
    println!("it works"); // this does get printed
}
Run Code Online (Sandbox Code Playgroud)

arrays slice rust

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

标签 统计

haskell ×2

rust ×2

arrays ×1

erlang ×1

fold ×1

iterator ×1

meck ×1

newtype ×1

slice ×1

traits ×1