0
begin:- 

go,
initialise.             % drive predicate

begin:-
write('Sorry cannot help'),nl,nl.



go:-
write('Below is the list of the current toys available within the 

store.'),nl,nl,nl,nl,
loop_through_list([car, football, action_men, train_tracks, lego, football, bikes, control_car, drees_up, doll, bear, furbies, craft, doll_house]).
loop_through_list([Head|Tail]) :-
    write(Head),
    write(' '),
    loop_through_list(Tail).
initialise:-
nl,nl,nl,nl,
tab(40),write('******************************************'),nl,
tab(40),write('*** TOY GENERATING SYSTEM ***'),nl,
tab(40),write('******************************************'),nl,nl,
write('Please answer the following questions'),
write(' y (yes) or n (no).'),nl,nl, nl, nl.

ここでの問題は、go:-initialise:-が単独で動作する場合は別々に動作するが、一緒に動作する場合は動作しないことです。すべてに問題がありnlますか?

4

1 に答える 1

2

問題は、go/0正しく機能しないことです。リストを出力している間、最後に失敗します。つまり、後で実行が停止します。したがって、 を実行するbegin/0と、initialize/0は決して実行されません。

それを修正するには、次の基本ケースを追加する必要がありますloop_through_list/0

loop_through_list([]).
loop_through_list([Head|Tail]) :-
    write(Head),
    write(' '),
    loop_through_list(Tail).

補足として、「print_list」はよりわかりやすい名前になりますloop_through_list/0

于 2012-11-18T14:50:46.893 に答える