入力リストが空のときに私のプログラムが停止しない理由はありませんが、そのケースを処理できる事実があります。ここに私のコードです:私はこのような文字のリストを持っている私のリストが空のときにプロローグプログラムが停止しない
build_vps([], []).
build_vps([X | Ys], Zs):-
atom_number(X, C),
number(C),
build_vps(Ys, Zs).
build_vps([X, Y, Z | Ys], Zs):-
Y = '^',
atom_number(Z, C),
number(C),
build_vps(Ys, [v(C, X) | Zs]).
build_vps([X, Y, Z | Ys], [v(1, X)| Zs]):-
Y \= '^',
build_vps([Y, Z | Ys], Zs).
[X、^「3]と私は、このVのような構造にそれらの文字を入れなければならない(3、X)。私はこれをbuild_vps([x、y、^、 '3']、R)のように呼んでいます。達成しようとしているのは、R = [v(1、x)、v(3、y)]です。
トップレベルからどのように呼び出すことができますか?そして、あなたが達成しようとしていることの何らかの説明かもしれませんか? –
最初の引数にリストを含む再帰的述語を書くときは、 'foo([] ...)'と 'foo([H | T]、..)という厳密な2つの節を持つことができますように、 。): - ...、foo(T、...)。 '。 –
あなたは答えを編集して**正確に**ファイルのロード方法、クエリの実行方法、および何が起こるのかを表示する必要があります。今、私のために '? - build_vps([x、y、^、3]、R).'を実行しています('^'の後にコンマをつける必要があります) 'atom'が予想され、 '3'(整数)が見つかりました。だから私はあなたが私に与えたものであなたのエラーを再現することはできません。 –