ocaml - 为什么此代码不起作用递归函数出错
问题描述
我应该检查两个列表是否是字谜我认为我为该任务制作了正确的代码,但这需要帮助
let rec ana l1 l2 =
if l1=[] && l2=[] then true
else if List.hd l1 = List.hd l2 then ana (List.tl l1) l2
else if List.hd l1 != List.hd l2 then ana l1 (List.tl l2)
else false;;
ana [2;9;4;7] [2;4;7;9];;
解决方案
您没有处理一个或另一个列表为空的情况,只有当两者都为空时。因此,当您到达 时else if List.hd l1 = List.hd l2
,当l1
orl2
为空时,List.hd
将引发异常,因为它没有为空列表定义。
您可能想改用模式匹配,这样可以避免这种情况并警告您任何丢失的情况。这是使用模式匹配重写的代码。它仍然不能满足您的要求,但至少不会引发异常:
let rec ana l1 l2 =
match l1, l2 with
| [], [] ->
true
| h1::t1, h2::t2 ->
if h1 = h2 then
ana t1 l2
else
ana l1 t2
| _ ->
false
推荐阅读
- perl - Parallel Fork-Manager:输出中其他子进程的片段
- flutter - 在动态脚手架中显示 SnackBar 失败
- php - Laravel 5.5 \Memcache 未找到
- python - 使用 WIQL 从 Azure Devops 检索链接的工作项
- python - Docker ModuleNotFoundError:没有名为“scipy”的模块
- html - Flask静态子目录中的动态文件名加载
- python - pyspark中的枢轴数据框
- cmd - 如何运行特定的 cmd.exe 以获得所需的结果?
- android - 在本地通过nodejs服务器发布android GPS位置?
- mapbox - Mpabox GL case 表达式输出,执行数学表达式