私は現在ocaml
、プログラミング言語クラスについて自分自身を教えており、関数パラメーターを指定して型をとして返す方法を理解しようとしていますList
。
私は、ファイル読み込みプログラムを作成していchar
ことでchar
店舗ごとchar
ではList
、返し、リストを逆にしますList
。
現在のコード:
(*
Creating a function that will read all the chars
in a file passed in from the command argument.
This function takes a parameter of type List.
This function will return a List.
*)
let read_file (char_List : List) : List =
let char_in = open_in Sys.argv.(1) in (* Creating a file point/in_channel *)
try
while true do
let c = input_char char_in in (* Getting char from the file *)
char_List := c :: !char_List (* Storing the char in the list *)
done
with End_of_file ->
char_List := List.rev !char_List; (* End of file was reaching reversing char list *)
close_in char_in; (* Closing the file pointer/in_channel *)
;;
(* Storing the result of read_file to buffer which buffer is of type list *)
let buffer = ref [] in
read_file(buffer);
print_string "\nThe length of the buffer is: ";
print_int (List.length !buffer); (* Printing length of the list *)
print_string ("\n\n");
List.iter print_char !buffer; (* Iterating through the list and print each element *)
パラメータタイプとリターンタイプの指定を削除するとList
、コードは意図したとおりに実行されます。しかしながら; パラメータの型を指定し、型をとして返したいのList
ですが。
関数パラメーターと戻りタイプをどのように指定しますList
か?
まず、List
モジュールはタイプではないので、おそらくを意味しlist
ます。ただし、list
リストはそれ自体が型ではないため、のみで注釈を付けることはできません。不明なもののリストではなく、既知の型を持つ要素のリストが必要です。たとえば、あなたの場合、文字のリストがあり、これはchar list
。と書くことができます。同様に、整数のリストが入力されint list
ます。
より正確にlist
は、それ自体は型ではなく、引数としてリストの要素の型を取り、そのような要素のリストの型を返す型コンストラクターです。
ps:OCamlを学んでいるなら、より機能的なスタイルに慣れるために参照を使わずにコードを書き直そうとすることができます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加