重複の可能性:
Prolog- 英語から C への翻訳
基本的に、[add,3,to,5] などの英語の表記を表すリストが与えられる割り当てがあり、それを取得して、対応する C の表記を出力させる必要があります。
english2C([add,3,to,5], C).
C = 3+5
そして、これらの数には限りがあります。このような 2 つのリストを組み合わせて、より長いリストを作成することもできます
english2C([add,3,to,5,',',then,subtract,7], C).
C = 3+5-7
しかし、これらの長いリストは常に短いリストで構成されており、その数は一定です。それが私が立ち往生しているところです。パターン マッチングを使用できるようにしたいのですが、prolog で構文がどのようになるか完全にはわかりません
english2C([first,second,third,fourth|rest], C)
*pseudo code*
match first with an operator
C = second (matched operator) third
したがって、足し算、引き算、掛け算などの場合があります。基本的には、「I を J に追加する」というフレーズをリストから検索し、そのフレーズを (I + J) で統一したいと考えています。または、リストから「I を J で割った余りを取る」を検索し、(I '%' J) で統一します。しかし、すべてのフレーズはさまざまな長さであり、自分が何をしたいのか、どのようにそれを行うのかを知っていても、プロローグでそれを理解できないようです.
少し更新しましたが、ファイル内のすべての基本ルールのリストを現在持っていることを忘れていました。
rule([add,I,to,J], X) :- X = I+J
rule([subtract,I,from,J], X) :- X = J-I
などなど。問題は結合されたリストです。たとえば、リストは [add,I,to,J,',',then,subtract,H] で、I+JH でなければなりません。個々の基本ルール (I+J および XH) は定義されていますが、長いリストの各部分を一致させる必要があります。