list - 等于参数的最后一个元素之前的切割列表
问题描述
我需要一个函数:
splitOn :: (Eq p) => p -> [p] -> ([p], [p])
以便:
splitOn 'b' ['a', 'b', 'b', 'b', 'c', 'a'] = (['a', 'b', 'b'], ['c', 'a'])
splitOn 'b' ['a', 'b', 'c', 'a'] = (['a'], ['c', 'a'])
传递的参数保证在中间的连续块中。
有没有办法splitOn
一次性通过列表?
抱歉,如果这是重复的,我找不到搜索它的方法。
解决方案
首先我们这样做,然后我们这样做,然后我们停止:
splitOn :: Eq a => a -> [a] -> ([a], [a])
splitOn b xs = g xs
where
g [] = ([], [])
g (x:xs) | x==b = f xs
| otherwise = first (x:) $ g xs
f [] = ([], [])
f (x:xs) | x==b = first (x:) $ f xs
| otherwise = ([], x:xs)
推荐阅读
- php - 警告:file_get_contents():文件名不能为空
- python - 提取 XML 文件中的项目并将其转换为 Python 中的 dict
- oracle - all_scheduler_job_run_details 列中的不同时区
- neural-network - 对象检测的可能回归损失
- symfony - 我不能有超过 2 个 vichuploader 映射 | symfony 3.4
- python - 使用 Python 和 Pandas 将 Excel 工作表拆分为单独的工作表
- python - Pydantic:根据其他字段的值在验证器中设置字段 None
- angular - 具有 Spring Boot 安全性和 Keycloak 的 Angular 前端
- node.js - 如何读取每一行并插入数据库以及删除不需要的空格以及多个逗号
- ios - 如何解析两个 XML 标签之间的所有 XML 标签及其内容?TBXML