

SWI-Prologの仕様についての質問です。ver 7.1.17 または ver 6.6.1 で確認したことですが、  
基本的に現在のこの処理系はソースプログラム中のアトムに改行を含んでよい。それをインタプリタトップが読み込む際に'\n'コードに変換する。5行以上の改行を許可したい場合は、~/src/pl-
incl.h の#define NEWLINES 5
の値を大きな値に変えて、コンパイルし直せばよい。そう理解しています。インタプリタトップに於いてもソースプログラムと同様です。  
ところが、以下の例では、

[code]

    ?- read_term_from_atom('ab
    cd',X,[]).
    ERROR: Syntax error: Operator expected
    ERROR: ab
    
    ERROR: ** here **
    ERROR: cd . 
    ?-
    
[/code]

とエラーになってしまいます。これは atom_to_term/3 を使っても同じ現象が生じます。  
マクロ処理的な前段を含むか含まないか、処理後のアトムを見ているか、処理前のアトムを  
見ているか、によって起こっているようにも思えます。

これら述語はごく当たり前に使用する述語であり、もしこのような仕様だとすれば、  
その悪影響は甚大であると考えます。これは、正当な理由のある仕様なのでしょうか。  
それともバグの類であると考えて、改善を求めるべきなのでしょうか。


CC BY-SA 3.0
2015-04-13T08:08:56.913
9108
2015-04-14T07:58:23.623
5175
question
prolog
SWI-Prologのread_term_from_atom/3の改行処理にバグがあるのではないか？


これ、すみません。私の勘違いでした。

削除したいところですが、どこに問題があったかを  
示すべきなので残します。

私が指摘した問題は、一旦、改行を含むアトムとして、  
成功裡に取れた後の、解析フェーズで起こったものでした。  
解析対象のアトムが改行を間に挟んだ、

[code]

    'ab
    cd'
    
[/code]

ではエラーになるのは当然でした。abの後にカンマを付加して

[code]

    ?- read_term_from_atom('ab,
    cd',X,[]).
    X = (ab, cd)
    
[/code]

ならばエラーにはなりません。

つまり、構文エラーにならないような、項として認識できるような  
複数行のアトムを与えて確かめなければいけませんでした。

実は、私がアトム中の改行数が多すぎる時に出る  
エラーメッセージと構文解析時に出るエラーメッセージを  
全く同じもののように錯覚していました。ところが確認して  
みると改行数エラーのメッセージは

[code]

    ERROR: Stream User_input:14:1 Syntax error:String too long
    
[/code]

のようなものであり、全くの別物でした。  
ということで、昨夜に書いた釈明ではこの二つの  
メッセージが同一だったので混乱したことになって  
いましたが、実際には同じではなく、全て私の勘違いで  
あったことがわかりました。

返す返す、お騒がせして、申し訳ありません。


CC BY-SA 3.0
2015-04-13T14:11:10.827
9123
2015-04-14T07:58:23.623
2015-04-14T07:58:23.623
5175
5175
9108
answer