1

入力データとして、100行を含むファイルがあります。各行には、数字の後にドットが続きます。ソートされた番号をますます別のファイルに印刷する必要があります。

私はファイルから読み取り、see and tellを使用してファイルに印刷することを知っていますが、1から100までのすべてを実行する場合、seeの各行に対してread(X)、read(Y)などを実行しません。 () 迷っています。では、この問題にどのようにアプローチしますか?

4

1 に答える 1

0

この説明は、必要な実際のコードよりもはるかに冗長であることに注意してください。

?- 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 = []
  .
于 2012-11-21T09:31:29.767 に答える