1

次のコードが与えられます:

example1(X) :- X is 1.
example2(X) :- X is 1+1.

gprologで実行すると、次のようになります。

$ gprolog 
GNU Prolog 1.4.0
By Daniel Diaz
Copyright (C) 1999-2011 Daniel Diaz
| ?- ['example'].
compiling /Users/tomo/projects/7L7W/prolog/day2/example.pl for byte code...
/Users/tomo/projects/7L7W/prolog/day2/example.pl compiled, 1 lines read - 490 bytes written, 7 ms

(1 ms) yes
| ?- example1(X).

X = 1

yes
| ?- example2(X).

Fatal Error: Segmentation Violation

ただし、ファイルをコンパイルすると、次のようになります。

$ gplc example.pl -o example
$ ./example 
GNU Prolog 1.4.0
By Daniel Diaz
Copyright (C) 1999-2011 Daniel Diaz
| ?- example1(X).

X = 1

yes
| ?- example2(X). 

X = 2

yes

私は何が欠けていますか?最初のケースでセグフォールトし、2番目のケースで正常に実行されるのはなぜですか?

(役立つ場合:Mac OS 10.7.2)

4

1 に答える 1

1

これはおそらく gprolog のバグです。報告するだけです。

また、より一般的でサポートされている SWI-Prolog を使用することをお勧めします。

于 2011-11-21T08:58:55.490 に答える