2112


こちらの文字列を置換する問題を解いてみています。 <http://nojiriko.asia/prolog/seikihyogen9_101.html>

要約すると、 `(hoge)あいうえお` を `あいうえお` のように、 **先頭の部分のかっこを削除する** Prologプログラムを書く問題です。

今回は、リンク先にあるようなリスト操作で処理するのではなく、 別解として正規表現もしくは、それに代わる方法を知りたいと考えています。

* * *

利用している処理系は、以下のいずれかです。

  * SWI-Prolog version 5.10.4 for amd64
  * SWI-Prolog version 6.6.6 for amd64


CC BY-SA 3.0
2014-12-19T06:23:07.067
2109
2014-12-20T05:02:50.370
5021
question
正規表現 prolog
Prologにて「正規表現」を使う方法、もしくはそれに代わる方法はありませんでしょうか


SWI-Prolog には regex パッケージが用意されていますので、それを使ってみてはいかがでしょうか。

["regex" pack for SWI-Prolog](http://www.swi-prolog.org/pack/list?p=regex)


CC BY-SA 3.0
2014-12-19T07:25:09.557
2112
2014-12-19T07:25:09.557
2109
answer


再帰述語版の定義です。

[code]

    '文字列の先頭のカッコのみ外す。ただしカッコの入れ子は許さない。'(_文字列,_先頭のカッコが外された文字列) :-  
    atom_chars(_文字列,_文字リスト),  
    'リストの先頭のカッコのみ外す。ただしカッコの入れ子は許さない。'(_文字リスト,_先頭のカッコが外された文字リスト),  
    atom_chars(_先頭のカッコが外された文字列,_先頭のカッコが外された文字リスト).  
    
    
    'リストの先頭のカッコのみ外す。ただしカッコの入れ子は許さない。'(['('|R],_カッコが外されたリスト) :-  
    '最初の右カッコ以外はコピー。ただしカッコの入れ子は許さない。'(R,_カッコが外されたリスト),!.  
    'リストの先頭のカッコのみ外す。ただしカッコの入れ子は許さない。'(_文字リスト,_文字リスト).  
    
    
    '最初の右カッコ以外はコピー。ただしカッコの入れ子は許さない。'(['('|_], _) :- !,fail.  
    '最初の右カッコ以外はコピー。ただしカッコの入れ子は許さない。'([')'|L],L) :- !.  
    '最初の右カッコ以外はコピー。ただしカッコの入れ子は許さない。'([_文字|R1],[_文字|R2]) :-  
    '最初の右カッコ以外はコピー。ただしカッコの入れ子は許さない。'(R1,R2).  
    
[/code]


CC BY-SA 3.0
2014-12-20T02:18:06.360
2183
2014-12-20T05:02:50.370
2014-12-20T05:02:50.370
5021
5175
2109
answer