recursion - 如何在 CAML 中将字符列表(表示单词)划分为所有可能的(前缀、单个字母、后缀)三元组?
问题描述
我将类型“单词”定义为字符列表。我正在尝试编写一个递归函数“divide_word”,它将一个“单词”作为参数并返回“单词”的所有可能(前缀、单字母、后缀)组合的三元组列表。
OCAML 中的执行示例:
assert( divide_word ['c';'o';'d';'e'] = [ ([],'c',['o';'d';'e']) ; (['c'],'o',['d';'e']) ; (['c','o'],'d',['e']) ; (['c','o','d'],'e',[]) ];;
我试过编写函数,但它只返回最后可能的组合。我知道我必须找到一种方法来返回一个实际列表而不仅仅是一个三元组,我尝试连接并编写一个单独的函数。
这是我写的代码:
type word = char list;;
let rec divide_word (w:word) : (word*char*word) list =
match w with
|[] -> []
|h::[] -> [([],h,[])]
|h::t -> List.map (fun (fir,sec,th) -> (h::fir,sec,th)) (divide_word t);;
帮助!C:
解决方案
您快到了。在模式匹配的最后一种情况下,您可以正确计算所有三元组,其中从第二个到最后一个的任何字符都用作分隔符,但您还必须在该列表中添加第一个字符(即h
)是分隔符的情况(因此前缀为空,后缀为t
)。
完成此操作后,您可能会注意到该案例h::[]
实际上是 的一个特定案例h::t
,因此无需按照自己的模式分开处理。
推荐阅读
- php - php - 在浏览器中显示 png/image 在 localhost 中有效,但在 aws 上无效
- python - 对已修改的照片进行正确的图像处理
- python-3.x - 如何在 pandas 数据框中分隔一个带有 2 个大写字母的字符串和一个带有正则表达式的空格?
- c++ - 我的 main() 文件中不能包含头文件
- python - 在 TPU 上使用 tf.data.Dataset 和 Keras
- typescript - 带有可选参数和剩余参数的打字稿函数重载
- c++ - HRESULT 0x8876086c D3DERR_INVALIDCALL with DirectX9 几乎遵循文档示例
- powershell - 无法使用 Scoop 将 Windows 上的 GitHub CLI 更新到版本 1.5.0
- laravel - 管理应用程序中的设置
- r - R:下标越界,执行停止