Я не совсем понимаю вашу вторую функцию. Вы складываете пустой список, и ваша функция принимает аргумент 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, будет возвращен пустой список (я не уверен, что вы этого хотите или нет).
Я думаю, что проблема, с которой вы столкнулись, заключается в том, что вы рассматриваете списки так, как будто они изменчивы, и думаете, что сворачивание изменяет список. Это не так, сложение просто проходит через каждый элемент в списке и применяет к нему функцию. Поскольку ваш список пуст, он ничего не сделал.