2017-02-18 25 views
0

Я не могу найти способ получить список из значений, заданных пользователем. I уже сделал функцию insert, которая вставляет значение в список, но я не знаю, как для получения значений от пользователя здесь мой код, содержащий 4 примера A1, .., A4 переменных id, как получить от пользователяКак получить список значений из пользовательского ввода в ocaml

ответ

1

Вы можете использовать read_line, чтобы получить ввод от пользователя в строке, а затем использовать Str, чтобы разбить его.

В utop (обратите внимание, что пользователь вводит «1 2 3 4» ТНХ к read_line())

#require "str";; 
#read_line() |> Str.split (Str.regexp " +") |> List.map int_of_string;; 
1 2 3 4 
- : int list = [1; 2; 3; 4] 
# 

Вы можете использовать более сложное регулярное выражение, чтобы разделить ввод (для управления запятой, точка с запятой,. ..)

[относящийся ко второму комментарию], предположим, что вы хотите разбить строку «» (5, 3, 5) (4,3,5) «» на триплет целого числа, сначала расщепляется в соответствии с круглой скобкой (первый экземпляр раскола ниже), затем для каждой группы вы разбиваетесь в соответствии с необходимыми элементами:

Str.split (Str.regexp ")") s |> 
    List.map (fun x -> Str.split (Str.regexp "[(, ]+") x |> 
      List.map int_of_string) ;; 

В случае, если элементы не имеют одинакового типа, вам нужна функция, которая принимает список в качестве входных данных и переводит его в кортеж).

+0

требует не работать im, работая над текстовым редактором –

+0

Я немного читаю о модуле Str, но проблема заключается в том, как я могу добавить пары или триплеты на пример (int * char * int) в список –

+0

для 1-й комментарий: когда вы компилируете свой код, связывайте его с pkg str (ocamlbuild -use-ocamlfind -pkg str yourappli.native). –