問題タブ [meta-predicate]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
lambda - 「匿名」述語で maplist/3 を使用することは可能ですか?
maplist/3 で達成したいことは、たとえば次の擬似コードです。
たとえば、次のように書くことができることを知っています
したがって、疑似コードlambda X: Z/Y=X, to_lower(Z,LC), char_code(L,LC), return L/Yを通常の述語として定義し、この述語をマップリストで使用できます...
しかし、まったく新しい述語を作成せずにこれを行うことができるかどうか、私は興味がありますか?
このようにしたい理由は、述語を見つけるためにコードを飛び回るよりも、読む方が自然だと思うからです。
prolog - パス/トレイル/ウォークの定義
多くの述語は、二項関係を介して定義されたエッジから構築されたある種の非循環パスを定義します。これは、推移閉包を定義するのと非常によく似ています。したがって、一般的な定義が求められます。
グラフ理論で定義された概念は、一般に期待されているものとすぐには一致しないことに注意してください。最も注目すべきは、エッジの名前には関心がないことです。
さらに悪いことに、グラフ理論も少し変更され、 walk の概念が導入されました。
伝統的に、現在一般にオープンウォークとして知られているものと呼ばれる道。今日では、条件なしで述べた場合、通常、パスは単純であると理解されています。つまり、頂点が繰り返されない (つまり、エッジが繰り返されない) ことを意味します。(チェインという用語は、すべての頂点とエッジが異なるウォークを指すためにも使用されています。)
だから私の質問は: この機能に名前を付けて定義する方法は?
私がこれまでに行ったことは、次のように定義することです。
最初の引数は、さらに 2 つの引数がない不完全な目標である関係の継続でなければなりません。次にPath、頂点または頂点のペアのいずれかが続きます。
使用例
実装
module - ライブラリのメタ述語に渡されるゴールのモジュール展開
SWI-Prolog (マルチスレッド、64 ビット、バージョン 7.3.5) を使用して、段階的に進めます。
モジュールでdcg nonterminalを定義します(発音: " di-SEE-goh "):
/li>a//1dcgAuxとを使用して、次のクエリを実行し
phrase/2ますapply:foldl/4。ねえ!かなりの驚きであり、良いものではありません。未知の未知のものを見逃していませんか?
上記の苛立たしい行動を取り除くには、まずその原因を突き止める必要があります。
/li>
どうしたの?私がそれを見る方法はこれです:
- に渡されるゴールのモジュール拡張
foldl/4は制限されています。 のSWI-Prolog マニュアルページ
import_module/2からの引用:すべての通常のモジュールは、システムからインポートするユーザーからのみインポートします。
SWI
library(apply)は からのみ「継承」しますsystemが、 は継承しませんuser。
/li>applyモジュールを複製applY(および新しいモジュール名を伝搬) すると、次のことがわかります。
私がどのように進めるべきか、どのように進めるべきかについて、あなたのアイデアを共有してください!
(他の Prolog プロセッサで同様の実験をまだ行っていません。)
count - Prolog ゴールを入力として最初の引数の位置に置き、このゴールが 2 番目の引数の位置で成功する回数を返します
タイトルが示すように、これを行うプログラムを書きたいと思います。
例は次のとおりです。
ただし、組み込みメンバーだけでなく、次のような一部の演算子についても同様です。
誰かが私が始めるのを手伝ってくれますか?
prolog - Prolog 高階リデュース述語
高次マップ述語を次のように定義できます。
同様に、 fold (左) を次のように定義できます。
reduce (左)の正しい定義は? 次のように定義できますか?
そして、次のようにreduceback(右)?
これらは正しいですか?