ラムダ式をサポートするJava PROLOG実装はありますか? LISPやClojureなどのラムダ式をサポートする他の言語のJava実装があることはわかっていますが、実際にはPROLOG実装が必要です。ラムダ式のPROLOG
http://en.wikipedia.org/wiki/Comparison_of_Prolog_implementations
ラムダ式をサポートするJava PROLOG実装はありますか? LISPやClojureなどのラムダ式をサポートする他の言語のJava実装があることはわかっていますが、実際にはPROLOG実装が必要です。ラムダ式のPROLOG
http://en.wikipedia.org/wiki/Comparison_of_Prolog_implementations
リーンプロローグはJavaで実装されており、Logtalkを実行できるウェブページ、。 Logtalkのラムダ式の構文の概要については例えばを参照してください。使用例については
http://blog.logtalk.org/2009/12/lambda-expressions-in-logtalk/
は、以下を参照してください。
https://github.com/LogtalkDotOrg/logtalk3/tree/master/examples/lambdas
ウルリッヒNeumerkelにより、Prologのラムダ実装があります。たとえば、SWI-Prologがそれをサポートしています。あなたはstackoverflowので検索した場合:
[swi-prolog] lambda
あなたはまた、ソリューションのためにそれを使用してかなりの数の答えを見つけることができます。また
、すべての supported backend Prolog compilersへのラムダ式が使用できるようになり explains it allを プロローグでのラムダ式のために周りの二つのアプローチ、その唯一のアドレスは基本的にあります。ラムダ式の呼び出しと 上位統一:
グローバル・バイ・デフォルト:彼らは余分なバインダーで に言及されていない場合は、ラムダ 式の本体内変数は、デフォルトでグローバルです。
ローカル・バイ・デフォルト:彼らは余分なバインダーで言及 されていない場合、ラムダ 式の本体内変数は、デフォルトでローカルです。ローカル・バイ・デフォルトの
代表は、例えばウルリッヒNeumerkelの ライブラリー(ラムダ)またはLogtalkで見つかったラムダ式です。 デフォルトによるグローバル・アプローチの後に、Jekejeke Prologのラムダ の式が続きます。
両方のアプローチは、以下のような問題点を同じ数学的なラムダ 表現をモデル化し、解決することができます:共有や 複数の呼び出し間での変数の非共有の
コントロール。
バインダーとローカル変数のアルファ変換を強制的にラムダ式の本体に入れます。 ここ
?- Y = F\X^call(X\call(F,call(X,X)),X\call(F,call(X,X))), Fact = F\J^H^M^N^N\J^H^M^M\J^H^(N=0,M=1;N>0,H is N-1,call(F,H,J),M is N*J), call(Y,Fact,10,R). R = 3628800.
?- Y = \F^call([F]+\X^call(F,call(X,X)),[F]+\X^call(F,call(X,X))), Fact = \F^([F]+\N^([N,F]+\M^(N=0,M=1;N>0,H is N-1,call(F,H,J),M is N*J))), call(Y,Fact,10,R). R = 3628800.
さようなら
PS:
言語機能とアーキテクチャ
B-プロローグのNENG-FA:バイ・デフォルト・グローバルとローカル・バイ・デフォルト区別が ページ10、から借りています論理プログラミングの周、理論と実践、2011
http://www.sci.brooklyn.cuny.edu/~zhou/papers/tplp11sips.pdf
ウルリッヒのラムダライブラリーは、Prologの実装ではなく、*のISO * Prologの実装である(たとえば、非ISO標準述語strip_module/3と非ISO標準ディレクティブmeta_predicate/1を使用します)。また、モジュールのISO Prolog標準に準拠していないモジュールシステムをサポートするPrologコンパイラも必要です。 –
@PauloMoura訂正ありがとう! –
@PauloMoura:[この実装](http://www.complang.tuwien.ac.at/ulrich/Prolog-inedit/ISO-Hiord#implementation)をお読みください!また、strip_module/3もmeta_predicateもモジュール参照も含まれていません。あなたが言及するSWIの実装には、あなたが言及したSWIの実装特有の機能をいくつか考慮に入れています。しかし、あなたが逃したものはさらにあります。 – false