Фильтровать элементы в списке по длине - Ocaml

У меня есть следующий список:

["A";"AA";"ABC";"BCD";"B";"C"]

Я произвольно извлекаю элемент из списка. Но извлекаемый мной элемент должен иметь размер 3, но не меньше 3.

Я пытаюсь сделать это следующим образом:

let randomnum = (Random.int(List.length (list)));;
let rec code c =
    if (String.length c) = 3 then c
    else (code ((List.nth (list) (randomnum)))) ;;
print_string (code ( (List.nth (list) (randomnum)))) ;;

Это отлично работает, если случайным образом из списка выбирается строка длиной 3.

] Но программа не завершается, если выбирается строка длиной <3. ] Я случайным образом извлекаю элемент из списка. Но элемент, который я извлекаю, должен иметь размер 3, но не меньше 3. Я пытаюсь сделать ...

У меня есть следующий список:

["A";"AA";"ABC";"BCD";"B";"C"]

Я произвольно извлекаю элемент из списка. Но извлекаемый мной элемент должен иметь размер 3, но не меньше 3.

Я пытаюсь сделать это следующим образом:

let randomnum = (Random.int(List.length (list)));;
let rec code c =
    if (String.length c) = 3 then c
    else (code ((List.nth (list) (randomnum)))) ;;
print_string (code ( (List.nth (list) (randomnum)))) ;;

Это отлично работает, если случайным образом из списка выбирается строка длиной 3.

] Но программа не завершается, если выбирается строка длиной <3. ] Я случайным образом извлекаю элемент из списка. Но элемент, который я извлекаю, должен иметь размер 3, но не меньше 3. Я пытаюсь сделать ...

У меня есть следующий список:

["A";"AA";"ABC";"BCD";"B";"C"]

Я произвольно извлекаю элемент из списка. Но извлекаемый мной элемент должен иметь размер 3, но не меньше 3.

Я пытаюсь сделать это следующим образом:

let randomnum = (Random.int(List.length (list)));;
let rec code c =
    if (String.length c) = 3 then c
    else (code ((List.nth (list) (randomnum)))) ;;
print_string (code ( (List.nth (list) (randomnum)))) ;;

Это отлично работает, если случайным образом из списка выбирается строка длиной 3.

] Но программа не завершается, если выбирается строка длиной <3. Я пытаюсь выполнить рекурсивный вызов, чтобы новый код продолжал подбираться, пока мы не получим один из длин = 3.

Я не могу понять, почему это не завершается. Оператор печати ничего не выводит.

5
задан Gilles 'SO- stop being evil' 23 February 2012 в 12:40
поделиться