我必须编写一个函数,给定两个列表,它返回第一个列表的元素列表,其平方出现在第二个列表中(抱歉我的英语)。我无法递归执行此操作,也无法使用 List.filter。这就是我所做的:
let lst1= [1;2;3;4;5];;
let lst2= [9;25;10;4];;
let filquadi lst1 lst2 =
let aux = [] in
List.map(fun x -> if List.mem (x*x) lst2 then x::aux else []) lst1;;
Run Code Online (Sandbox Code Playgroud)
它可以工作,但当数字不满足 if 语句时,它也会打印 []:
filquadi lst1 lst2 ;;
- : int list list = [[]; [2]; [3]; []; [5]]
Run Code Online (Sandbox Code Playgroud)
如何返回数字列表而不是数字列表的列表?
- : int list = [2;3;5]
Run Code Online (Sandbox Code Playgroud)
您可以使用 List.concat 将所有内容放在最后:
List.concat (List.map ...)
Run Code Online (Sandbox Code Playgroud)
作为旁注,aux在您的代码中没有做任何有用的事情。它只是空列表的名称(因为 OCaml 变量是不可变的)。[x]使用而不是可能会更清楚x :: aux。
正如另一边的评论,这是一个听起来很奇怪的任务。通常,禁止使用模块中的函数的原因List是鼓励您编写自己的递归解决方案(这确实是有教育意义的)。我暂时看不出禁止使用递归的理由,但以List不同方式组合函数很有趣。
| 归档时间: |
|
| 查看次数: |
681 次 |
| 最近记录: |