在Ocaml中从十进制转换为二进制

时间:2010-10-18 02:06:41

标签: decimal ocaml

我试图将给定的十进制值转换为相应的二进制形式。我正在使用我不太了解的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 个答案:

答案 0 :(得分:2)

我根本不了解你的第二个功能。您正在折叠一个空列表,并且您的函数采用它永远不会使用的参数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上调用它,将返回一个空列表(我不确定这是否是你想要的)。

我认为您遇到的问题是您将列表视为可变,并认为折叠会使列表发生变异。情况并非如此,折叠只是遍历列表中的每个元素并对其应用函数。由于你的清单是空的,所以没有做任何事情。