Find
w/ Replace
in Request
& put the answer inのすべての出現を置き換えるために、次のコードを思いつきましたResult
。これはDCGを使用しているので、すべて文字コードのリストです。クライアント コードが使用する述語はsubstitute
.
findReplace(_, _, [], []) -->
[]. % The end.
findReplace(Find, Replace, Result, ResultRest) -->
Find, % Found Find.
{ append(Replace, Intermediate, Result) }, % Put in Replace in Find's place.
!, % Make sure we don't backtrack & interpret Find as the next case.
findReplace(Find, Replace, Intermediate, ResultRest).
findReplace(Find, Replace, [ C | Intermediate ], ResultRest) -->
[ C ], % Any other character.
findReplace(Find, Replace, Intermediate, ResultRest).
substitute(Find, Replace, Request, Result):-
phrase(findReplace(Find, Replace, Result, []), Request).
これは SWI-Prolog で機能します。どうすれば改善できるかについて誰かコメントはありますか?DCG の & 差分リストの使い方を学んでいます。Find
たとえば、 を見つけた後、プロローグがバックトラックしてそれを通常の文字として解釈しないように、カットを入れました[ C ]
。これは必要ですか、それとももっと宣言的な方法がありますか?
もう 1 つの質問 - 代用と同じことを行うための述語がすでに利用可能ですか? おそらくアトム上で?
前もって感謝します。