このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 131代目 #461 # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10031.txt # # 問題1:整数表記を ::= {|'_'}*に書き換える。 # 正の整数をdigitだけではなく、'_'もトークンの一部として判別させてやるようにプログラムを書きかえる # 例えば、10_23と仮に有った場合は10=整数値、_=識別子、23=整数値という風に判別されるのではなく # 10_23=1023=整数値となるようにしなさい。 # 問題2:以下のようなトークンも判別できるようにしてみる。 # 句切り文字:'(', # 句切り文字:'(', # 句切り文字:';', # 演算子:'=' '問題1:整数表記を ::= {|'_'}*に書き換える。 正の整数をdigitだけではなく、'_'もトークンの一部として判別させてやるようにプログラムを書きかえる 例えば、10_23と仮に有った場合は10=整数値、_=識別子、23=整数値という風に判別されるのではなく 10_23=1023=整数値となるようにしなさい。'(_整数表記,_整数値) :- 整数表記を数字ならびに変換する(_整数表記,_数字ならび), 数字ならびから整数を組み上げる(_数字ならび,0,_整数値). 整数表記を数字ならびに変換する(_整数表記,_数字ならび) :- findall(_数字,( 数字桁だけ取りだす(_整数表記,_数字)),_数字ならび). 数字桁だけ取りだす(_整数表記,_数字) :- sub_atom(_整数表記,_,1,_,_数字), 数字(_数字). 数字('0'). 数字('1'). 数字('2'). 数字('3'). 数字('4'). 数字('5'). 数字('6'). 数字('7'). 数字('8'). 数字('9'). 数字ならびから整数を組み上げる([],_整数値,_整数値) :- !. 数字ならびから整数を組み上げる(_数字ならび,_受け取った値,_整数値) :- '受け取った値の桁を増しながら、数字ならびから整数を組み上げる'(_数字ならび,_受け取った値,_整数値). '受け取った値の桁を増しながら、数字ならびから整数を組み上げる'([_一桁の数字|R],_受け取った値,_整数値) :- atom_number(_一桁の数字,_一桁の数), _次に渡す値 is _受け取った値 * 10 + _一桁の数, 数字ならびから整数を組み上げる(R,_次に渡す値,_整数値).