Εργαστήριο Τεχνολογίας Λογισμικού
0 votes
250 views

Έχω μία συνάρτηση (OCaml) που μοιάζει με την εξής:

let longest filename = 
  let m, n, d = 11, 3, [42; -10; 8; 1; 11; -6; -12; 16; -15; -11; 13]
  in
    print_endline (string_of_int 5)

(με τη διαφορά ότι τα m,n,d τα διαβάζει από το αρχείο με path filename και αντί για 5 καλεί μια συνάρτηση που υπολογίζει την απάντηση)

Όταν το τρέχω locally στο toplevel, δουλεύει όπως αναμένεται, δηλαδή τυπώνει την απάντηση στο stdout και επιστρέφει - : unit = () αλλά ο grader μου λέει Failed to read program output (0 bytes).

Δοκίμασα να αλλάξω το print_endline σε Printf.printf και δεν άλλαξε κάτι. Είχε κανείς άλλος το ίδιο πρόβλημα;

in pl1 by (340 points) | 250 views

1 Answer

+1 vote
Best answer

Διάβασε καλύτερα την εκφώνηση. Το πρόγραμμα που έχεις υποβάλει έχει τη συμπεριφορά που θα είχε αν ήταν σε SML/NJ.

Τα προγράμματα σε C/C++, OCaml, MLton πρέπει να δέχονται ως command line argument το όνομα του αρχείου εισόδου, να διαβάζουν το input και να τυπώνουν το αποτέλεσμα στο stdout. Σκελετός τέτοιου προγράμματος σε OCaml:

let main =
  let chan = Scanning.open_in Sys.argv.(1) in
  let (m, n) = Scanf.bscanf chan "%d %d" (fun m n -> (m, n)) in
  let xs = ...
  Scanning.close_in chan;
  let best = solve m n xs in
  Printf.printf "%d\n" best

Αφήνω το διάβασμα της λίστας xs και την solve για άσκηση... :-)

by (9.5k points)
selected by
0

Ευχαριστώ πολύ και συγγνώμη για την απροσεξία!

301 questions

289 answers

288 comments

909 users