Превращение списка целых чисел в строку в OCaml - PullRequest
0 голосов
/ 25 февраля 2020

Как я могу превратить список целых чисел, таких как [1; 2; 3], в одну строку «123», используя fold?

Прямо сейчас, я думаю, что я делаю:

let int_list_to_string (s : int list) : string =
  fold (fun s combine -> combine + .... ) ""  

или что-то в этом духе, где .... может быть что-то похожее на String.length (которое я использовал в другая проблема сгиба для подсчета символов в строке), но я не знаю, является ли это хотя бы отдаленно правильным.

Спасибо!

1 Ответ

2 голосов
/ 25 февраля 2020

Ваш базовый c макет выглядит прямо мне. Многие вещи должны быть исправлены. Вот некоторые из них:

  1. Вы должны выбрать конкретную c функцию сгиба для использования, List.fold_left или List.fold_right.

  2. Складываемая функция принимает два параметра. Один - это накопленный результат, а другой - следующий вход из списка. Порядок зависит от того, используете ли вы fold_left или fold_right. У вашего эскиза кода есть два параметра, но один из них подозрительно называется s. Это не будет тот же s, что и список ввода. Имена после fun - это новые переменные параметров, введенные в этой точке.

  3. Оператор OCaml для объединения строк - ^, и это то, что вы должны использовать там, где у вас есть + (возможно, просто местозаполнитель в вашем коде).

  4. Перед объединением необходимо преобразовать каждое целое число в строку. Для этого существует функция с именем string_of_int.

  5. Вы должны применить сгиб к списку. То есть, fold принимает 3 аргумента, но вы указываете только 2 аргумента в наброске кода.

...