我是Ocaml的新手,我的问题是: 我有2个char列表。我想在另一个列表中列出2个列表的常见字符(错误。我的基本代码是这个(错误在"检查 - > hd1< - tl2"):
let rec check list1 list2 = match list1, list2 with
| hd1::tl1, hd2::tl2 when hd1 = hd2 -> hd1
| hd1::tl1, hd2::tl2 -> check hd1 tl2
| [],[] -> ' '
| _::_,_ -> ' '
| [],_::_ -> ' ';;
check ['l'; 'e'; 'l'; 'l'; 'o'] ['h'; 'e'; 'o'];;
我最大的问题是如何修复列表并继续前进?
另一个问题是我找到它时删除一个字符。 (例如:list1 ="你好" list2 =" helo"当找到第一个" l"时,list2 =" heo" final_list-- >" HELO"。)
我必须更好地学习这种模式概念。
答案 0 :(得分:0)
let check l1 l2 =
List.fold_left ( fun linter e1 ->
if(List.exists((=)e1)l2) then e1::linter else linter
) [] l1;;
测试
# check ['l'; 'e'; 'l'; 'l'; 'o'] ['h'; 'e'; 'o'];;
- : char list = ['o'; 'e']
一些解释
List.exists:检查e1是否在l2