【发布时间】:2013-12-16 21:11:58
【问题描述】:
我想创建一个以二进制形式返回下一个数字的函数。例如:
000 -> 001 -> 010 -> 011 -> 100 -> 101 -> 110 -> 111。我的功能是:
let rec next_number = function
| [] -> []
| (a,b)::[] -> if b = 0 then (a,1)::[] else (a,0)::[]
| l::(a,value1)::(b,value2)::[] -> if (value2 = 0) then l::(a,value1)::(b,1)::[]
else
begin
if value1 = 0 then l::(a,1)::(b,0)::[]
else (next_number l)::(a,0)::(b,0)::[]
end
;;
编译时出现错误:此表达式 (l in l::(a,value1)::(b,value2)::[]) 的类型为 'a * int 但表达式应为 ( 'a * int) 列表
如何告诉 OCaml 过滤器是一个列表然后是一对然后是一对然后是一个空列表而不是 3 对然后是空列表。
感谢您的帮助。
【问题讨论】: