Преобразование из десятичной в двоичную в Ocaml - PullRequest
1 голос
/ 18 октября 2010

Я пытаюсь преобразовать данное десятичное значение в соответствующую ему двоичную форму. Я использую Ocaml, о котором я мало что знаю, и я совершенно сбит с толку. Пока у меня есть следующий код

let dec_to_bin_helper function 1->'T' | 0->'F'
let dec_to_bin x = 
           List.fold_left(fun a z -> z mod 2 dec_to_bin_helper a) [] a ;;

Я должен указать, что мой вывод должен быть в форме списка T и F, где T представляют двоичные 1, а F представляют двоичные 0 Если я пытаюсь запустить приведенный выше код, он выдает ошибку «Ошибка: это выражение не является функцией; его нельзя применить» Я понимаю, что часть, где я вызываю вспомогательную функцию, неверна ... Любая помощь в этом вопросе будет признательна!

1 Ответ

2 голосов
/ 18 октября 2010

Я не совсем понимаю вашу вторую функцию. Вы складываете пустой список, и ваша функция принимает аргумент x, который она никогда не использует. Правильно ли я предположил, что вы хотите взять число и вернуть список «T» и «F», которые представляют двоичный код? Если это так, этот код должен работать:

let dec_to_bin x =
      let rec d2b y lst = match y with 0 -> lst
        | _ -> d2b (y/2) ((dec_to_bin_helper (y mod 2))::lst)
      in
      d2b x [];;

Эта функция вставляет (x mod 2), преобразованный в T / F, в список, затем рекурсивно вызывает функцию для x / 2 и список. Когда x = 0, список возвращается. Если вызвать 0, будет возвращен пустой список (я не уверен, что вы этого хотите или нет).

Я думаю, что проблема, с которой вы столкнулись, заключается в том, что вы рассматриваете списки так, как будто они изменчивы, и думаете, что сворачивание изменяет список. Это не так, сложение просто проходит через каждый элемент в списке и применяет к нему функцию. Поскольку ваш список пуст, он ничего не сделал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...