我希望为布尔值和非运算符的lambda演算构造提供不同编程语言的实现。
这些包括:
在JavaScript和Python中执行这个任务非常简单,就像这样:
但我无法想出如何使用C语言实现。在实现类似功能的时候,一个天真的想法是:
似乎在C语言中不可能实现,因为
有没有办法用C语言实现?有没有一种有意义的教育示例可以使用?也就是说,如果语法开始变得复杂,它最终会失去其目的... 如果C在任何方面都过于受限,则C ++的答案对我也有用,尽管具有相同的“复杂性”约束条件。也许我对C期望太高了。编辑:根据评论中Tom的建议,以下定义确实编译。
这些包括:
TRUE = lx.ly. x
FALSE = lx.ly. y
NOT = lx. x FALSE TRUE
在JavaScript和Python中执行这个任务非常简单,就像这样:
var TRUE = function(x,y){ return x;}
var FALSE = function(x,y){ return y;}
var NOT = function(b){ return b(FALSE,TRUE) ; }
但我无法想出如何使用C语言实现。在实现类似功能的时候,一个天真的想法是:
lambda true(lambda x, lambda y){ return x ; }
lambda false(lambda x, lambda y){ return x ; }
lambda not(lambda (b)(lambda, lambda) ){ return b(false,true) ;}
似乎在C语言中不可能实现,因为
typedef
不允许递归定义。typedef void (*lambda)(lambda,lambda) ;not valid in C
有没有办法用C语言实现?有没有一种有意义的教育示例可以使用?也就是说,如果语法开始变得复杂,它最终会失去其目的... 如果C在任何方面都过于受限,则C ++的答案对我也有用,尽管具有相同的“复杂性”约束条件。也许我对C期望太高了。编辑:根据评论中Tom的建议,以下定义确实编译。
typedef void *(*bol)() ;
bol true(bol x, bol y){ return x ; }
bol false(bol x, bol y){ return x ; }
bol not(bol b ){ return b(false,true) ;}
int main(){
bol p = not((bol)true);
return 0;
}
编辑2:然而,正如Tom和其他人指出的那样,这并不严格符合标准。
此外,正如@Antti Haapala和@n.m所指出的,这可能要求C语言承担过多。
目前我对于在C++中实现一个足够简单的方案持怀疑态度。