我有一项任务要完成,但我遇到了麻烦。这是ocaml,列表是主要焦点。
第一个函数接受一对夫妇[(a1,b1);(a2,b2)......]的列表,并验证每个“a”是否不同。
我试图分两部分来做这件事:
let rec isNotIn x = function
|[]-> true
|(a,_)::l -> a <> x && isNotIn a l;;
let isFunction = function
|[] -> false
|(a,_)::l -> isNotIn a l;;
我找不到让它工作的方法,isFunction只检查下面的一对是否有第一个元素等于它自己。但我需要它来检查列表中的每个第一个元素,而不仅仅是下一个元素。
答案 0 :(得分:3)
嗯,你所做的几乎是完美的,除非你忘了递归电话:
let rec isFunction = function
| [] -> true (* if the function is empty it's ok, no ? *)
| (a, _) :: l -> isNotIn a l && isFunction l;;
实际上,你的第一个函数并不仅仅取一对情侣列表,而是取一个元素x
并验证x
不是列表中任何一对夫妇的第一个元素。