Я не уверен, что понимаю, почему вы не хотите использовать дополнительный параметр, но вы можете использовать длину строки в качестве завершающего условия.Поскольку не ясно, что вы хотите сделать с исходной строкой, которая имеет более одного символа, вот две возможные версии:
let rec string128 s = if String.length s >= 128 then s else string128 (s^s);;
let string128bis s =
let orig_length = String.length s in
let rec aux s =
if String.length s >= 128 * orig_length then s else aux (s^s)
in aux s;;
string128
будет объединять строки до тех пор, пока результат не станет не менее 128широкие символыstring128bis
будет ожидать, что результирующая строка будет в 128 раз длиннее исходного ввода.И string128 "a"
, и string128bis a
вернут 128 a
, но string128 "abcd"
вернет строку из 128 символов, повторяющую abcd
, а string128bis "abcd"
будет иметь длину 512 символов.