さて、算術方程式のパーサーをコーディングしています。たとえば、入力をリストで取得し、"10+20" = [49,48,43,50,48]
すべての数字を対応する数字に変換します。たとえば[49,48,43,50,48] = [1,0,43,2,0]
、そこから10を超える整数を元に戻したいとします。
ascii -> digits からの変換 maplist と number_codes を使用して変換します。
私が持っていた1つのアプローチは、リストをトラバースし、それが0〜9の場合は変数に格納し、次の番号をチェックし、0〜9の場合はそれを他の変数に追加するなど、演算子にヒットするまで繰り返すことでした。単純に数字を追加することはできないようです。これが私の現在のコードです。
expression(L) :-
maplist(chars, L, Ls).
chars(C, N) :-
(
C >= "0", "9" >= C -> number_codes(N, [C]);
N is C
).
私のコードに追加する簡単な方法があるかどうかはわかりません (私の知る限り、maplist は渡されたリストと同じ長さのリストしか返しませんが、間違っている可能性があります)。
どんな助けでも大歓迎です:)