在2个列表中查找常见字符Ocaml

时间:2016-12-09 17:07:02

标签: list char ocaml matching

我是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"。)

我必须更好地学习这种模式概念。

1 个答案:

答案 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