小编Edg*_*gar的帖子

是否可以用 Haskell 或任何其他语言编写一个或多个仅表示封闭项的数据结构?

使用 De Bruijn 表示法,可以将 lambda 项定义为:

data BTerm = BVar Int | BLam BTerm | BApp BTerm BTerm

或者使用通常的符号, data Term = Var String | Lam String Term | App Term Term

这两种数据类型允许构造封闭项和包含自由变量的项。

是否可以定义仅允许构造封闭项的数据类型。即只有诸如:\xx、\x 之类的术语。xx, \x.\y. xy, \x.\y. y, \x.\y.\zz(xy)

haskell expression lambda-calculus term bound-variable

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

是否可以将闭包分配给 impl Fn() 类型的变量?

我能够使这段代码工作:

fn twice<T: Clone>(fst: impl Fn(T), snd: impl Fn(T)) -> impl Fn(T) {
    move |t| {
        fst(t.clone());
        snd(t)
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我想要的是这个(没有拳击):

fn sub<T: Clone>(mut fst: impl Fn(T), snd: impl Fn(T)) {
    fst = move |t: T| {
        fst(t.clone());
        snd(t)
    };
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让第二段代码无需装箱、使用特征、类型转换或任何其他方法即可工作?Rust 抱怨类型不匹配。

closures types rust

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