入力データとして、100行を含むファイルがあります。各行には、数字の後にドットが続きます。ソートされた番号をますます別のファイルに印刷する必要があります。
私はファイルから読み取り、see and tellを使用してファイルに印刷することを知っていますが、1から100までのすべてを実行する場合、seeの各行に対してread(X)、read(Y)などを実行しません。 () 迷っています。では、この問題にどのようにアプローチしますか?
入力データとして、100行を含むファイルがあります。各行には、数字の後にドットが続きます。ソートされた番号をますます別のファイルに印刷する必要があります。
私はファイルから読み取り、see and tellを使用してファイルに印刷することを知っていますが、1から100までのすべてを実行する場合、seeの各行に対してread(X)、read(Y)などを実行しません。 () 迷っています。では、この問題にどのようにアプローチしますか?
この説明は、必要な実際のコードよりもはるかに冗長であることに注意してください。
?- read_input(L), msort(L, S), write_output(S).
つまり(エジンバラスタイルのI / Oを使用)、入力ファイルを確認し、読み取りを続け、入力= end_of_file
(次にリストを閉じる)までリストに保存します。その後、 msortを使用してリストを並べ替え、出力ファイルに通知します。ループを使用して、リストの各要素を書き込みます。長さ/2を使用して、実際に100個の数値があるかどうかを確認できます。
テストされていないコードを編集して、現在の入力からリストを読み取ります
read_list(L) :-
read(N), N \= end_of_file
-> L = [N|Ns], !, read_list(Ns)
; L = []
.