Bên cạnh, nhưng rất quan trọng:
Mã của bạn là rõ ràng là sai bởi vì bạn có một cuộc gọi đệ quy mà tất cả các thông số là một trong những chính xác mà bạn nhận được trong Nó sẽ tạo ra một chuỗi vô hạn. của các cuộc gọi với các giá trị tương tự trong, do đó looping mãi mãi (một tràn ngăn xếp sẽ không xảy ra ở vị trí đuôi-rec).
Mã mà những gì bạn muốn sẽ là:
let explode s =
let rec exp i l =
if i < 0 then l else exp (i - 1) (s.[i] :: l) in
exp (String.length s - 1) []
Nguồn: http://caml.inria.fr/pub/old_caml_site/FAQ/FAQ_EXPERT-eng.html#strings
Ngoài ra, bạn có thể chọn để sử dụng một thư viện: pin String.to_list hoặc extlib String.explode
Về phía cộng, điều này sẽ làm việc cho một chuỗi rỗng! Bạn cần phải xử lý các chuỗi không trống một chút tốt hơn. Vì OCaml không cho phép bạn hủy cấu trúc một chuỗi có khớp mẫu, một hàm như thế này có lẽ sẽ sử dụng một chỉ mục (một số nguyên) để lấy các ký tự trong chuỗi. –
'| n -> string_to_char_list n' đó là một vòng lặp vô hạn cho bạn. Không bao giờ tái chế với cùng thông số mà bạn đã tham gia! – Ptival