我试图将给定的十进制值转换为相应的二进制形式。我正在使用我不太了解的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' 如果我尝试运行上面的代码,它会给我一个错误,说“错误:这个表达式不是函数;它不能被应用” 我理解我调用辅助函数的部分是错误的......任何有关此事的帮助都会受到赞赏!
答案 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上调用它,将返回一个空列表(我不确定这是否是你想要的)。
我认为您遇到的问题是您将列表视为可变,并认为折叠会使列表发生变异。情况并非如此,折叠只是遍历列表中的每个元素并对其应用函数。由于你的清单是空的,所以没有做任何事情。