ブール演算子とNOT演算子のラムダ計算のプログラミング言語を変えて実装したいと考えました。Cでのラムダ計算:ブール演算子とNOT演算子
これらは次のとおりです。
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) ;}
は再帰的定義
typedef void (*lambda)(lambda,lambda) ;not valid in C
Cでそれを行う方法がありますを許可しませんtypedef
として、Cで可能ないないようですか?それを行う方法は教育的な例として使用する意味がありますか?つまり、構文が煩雑になり始めると、その目的を打ち負かすことになります...
最後に、Cがあまりにも制限されすぎると、C++での回答も同じですが、私にとってはうまくいくでしょう「複雑さ」の制約私は
C.
のあまりEDIT期待することができる:しかし、この:コメント欄でトムの提案に続き を、以下の定義は
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;
}
EDIT2をコンパイル行います厳密にはありませんトムと他の人が指摘しているように適合しています。
さらに、@Antti Haapala、および@のn.mとして指摘し、これは私がC++で簡単な十分な実装があるかもしれないという懐疑的だ。この時点で
C.
のあまりを尋ねることができます。
コメントは議論の対象外です。この会話は[チャットに移動]されています(http://chat.stackoverflow.com/rooms/159410/discussion-on-question-by-masl-lambda-calculus-in-c-booleans-and-not-operator) 。 – Andy
@Andyこれは悪いタイミングです...遅れています。議論は長らく終わりました。このスレッドは、Tom、n.m.とAntti。これは誰にも役立ちません。 – MASL
ラムダコードを理解するためのミニインタプリタを書くことは容認できますか? –