Haskell:使用 $ 的函数应用

2023-11-27

在下面的代码片段中,您可以看到我用 Haskell 编写的两个 collat​​z 函数。对于递归应用程序,我在第一个示例 (collat​​z) 中使用括号来获得正确的优先级。

由于我刚刚学习了 $ 的函数应用,我尝试使用那个东西重写函数(collat​​z')。但是,我遇到以下错误:

无法匹配预期类型“[a]” 针对推断类型 `a1 -> [a1]' 在 `(:)' 的第二个参数中,即 `collat​​z'' 在 `($)' 的第一个参数中,即 `n : collat​​z'' 在表达式中: n : collat​​z' $ n `div` 2

collatz :: (Integral a) => a -> [a]

collatz 1 = [1]

collatz n | even n    = n : collatz (n `div` 2)
          | otherwise = n : collatz (n * 3 + 1)

collatz' :: (Integral a) => a -> [a]

collatz' 1 = [1]

collatz' n | even n    = n : collatz' $ n `div` 2
           | otherwise = n : collatz' $ n * 3 + 1

我觉得很奇怪,这不起作用。所以我尝试了一个类似的例子:

True : [even $ 3 `div` 3]

如果有人能看一下并告诉我我做错了什么,我将不胜感激。


$那么优先级较低:(以及其他任何东西)所以你的函数解析为

(n : collatz') $ (n `div` 2)

这会导致您的类型错误。第二个参数:需要一个列表,但您正在传递 collat​​z 函数。

如果您仍然想避免 3n+1 部分周围的括号,您可以执行以下操作

(n:) . collatz' $ n `div` 2
n : (collatz' $ n `div` 2)

尽管这些不一定比原来的更干净。如果您想知道,(n:)第一个例子是一个语法糖\x -> n : x

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Haskell:使用 $ 的函数应用 的相关文章

随机推荐

  • 如何使用我的主题指定黑暗操作模式

    我知道有几个关于设置操作栏的上下文操作栏 ActionMode 部分样式的问题 但它们似乎并没有完全解决我所追求的问题 我使用带有浅色主题和深色操作栏的工具栏 工具栏看起来像我想要的 但操作模式看起来像常规的深色主题 我需要改变什么风格才能
  • 如何在 Android 应用程序中执行 SQLite 查询?

    我试图在我的 Android 数据库上使用此查询 但它不返回任何数据 我错过了什么吗 SQLiteDatabase db mDbHelper getReadableDatabase String select Select id title
  • 将两个不同的 servlet 映射到相同的 URL 模式

    我遇到了一个别人写的J2EE项目 当我来到web xml 有两个不同的 servlet 映射到同一 URL 模式 我想知道这种方法的目的 它究竟是如何运作的以及目的是什么 这是相关部分web xml
  • 延迟约束检查

    目前 在我们的数据库设计中 我们在两个实体之间存在循环引用 换句话说 我们在每个表中都有外键 它们引用彼此的主键 为了在这些表中插入记录 我们需要执行延迟约束检查 这在 SQL Server 2008 中可能吗 我知道 Oracle DDL
  • 在 Visual Studio C# 中创建具有动态选项卡数量的选项卡控件

    如何在 Visual Studio C 中创建具有动态选项卡数量的选项卡控件 我有一个带有表的数据库customers 我需要创建一个表单 显示带有客户姓氏首字母的选项卡 仅显示表中应有条目的首字母 每个选项卡都应包含一个具有相应客户的 D
  • 对于 API 级别 < 11,getCheckedItemCount() 的等效项是什么?

    我正在使用此方法来检查检查了列表上的多少个项目 但收到此错误 表明此方法不适用于任何早于 11 的 SDK API 级别 8 中的 this 相当于什么 接受的答案对我不起作用 总是返回 0 我不得不使用以下代码 public static
  • 如何获取 C 中动态创建的结构数组的长度?

    我目前正在尝试获取动态生成的数组的长度 它是一个结构数组 typedef struct my data unsigned int id double latitude double longitude unsigned int conten
  • Singleton 和 @Autowired 返回 NULL

    我有一个存储库管理器来管理我的存储库 我有 Autowired 来实例化我的属性 但它们始终为空 bean 在我的 xml 中配置正确 有什么理由吗 public class RepositoryManager private static
  • 测量 Android 应用程序花费的时间

    我是安卓新手 在我的应用程序中 我想跟踪其他应用程序 安装在设备上 的使用时间 在前台 是否可以 如果是的话怎么办 提前致谢 首先 这里需要知道什么是在前台运行的应用程序 您可以使用以下命令检测当前的前台 后台应用程序ActivityMan
  • 如何在 Swift 3 (XCode 8) 中从文本文件读取数据

    首先我想从我现在的情况说起 1 现状 我有一个文本文件 data rtf 我也尝试过并且愿意使用 plist 或任何其他格式来获得结果 我一直在尝试从此文件中读取任何数据 并在标签上显示该数据 我尝试过预填充文件 在读取文件之前保存到文件
  • 使用 Boto 读取 S3 中文件的一部分

    我正在尝试读取存储在 S3 中的 700MB 文件 然而我只需要位置 73 到 1024 之间的字节 我试图找到一个可用的解决方案 但未能成功 如果有人能帮助我 那将是一个很大的帮助 S3支持使用 Range HTTP 标头的 GET 请求
  • 在用户提交的数据中不转义 & 符号是否存在安全风险?

    在显示用户生成 提交的信息时 转义其他特殊字符但不更改与号是否存在安全风险 我想让我的用户自由输入 html 实体 十六进制和十进制特殊字符 而不会给我的清理程序增加不必要的复杂性 这完全取决于数据放入的上下文 在 HTML 中 表示纯文本
  • 我们可以用二叉搜索树来模拟堆操作吗?

    我想知道我们是否可以使用二叉搜索树来模拟堆操作 插入 查找最小值 删除最小值 即使用 BST 来完成相同的工作 这样做有什么好处吗 我们当然可以 但具有平衡的 BST 最小值是最左边的元素 最大值是最右边的元素 找到这些元素是O logn
  • 在通过 loadGeoJson() 加载的功能上创建 Infowindows

    如果这是基础知识 我深表歉意 但我的 JavaScript 知识非常有限 我正在制作一个地图 该地图加载我在 ArcGIS 中创建的 GeoJSON 数据 并使用 ogr2ogr 重新格式化为 GeoJSON 我已经加载了地图并显示了 Ge
  • 如何从特定 FPS 的视频中提取帧?

    我能够提取特定的帧test mp4使用以下代码创建文件 import cv2 def get frames cap cv2 VideoCapture test mp4 i 0 while cap isOpened ret frame cap
  • 如何在 Kotlin 中向 Gson 注册 InstanceCreator?

    我可以使用代码1来保存MutableList
  • 在浏览器中加载 ionic 项目时提示错误“localhost:8100 said gap_init:3”消息

    当我在任何页面代码中进行更改时 都会显示一条提示消息 localhost 8100说gap init 3 然后我单击 确定 按钮 另外显示 5 条消息 关闭浏览器并再次打开效果良好 但进行任何更改都会显示此提示 如何修复它 提前致谢提示错误
  • 从基类指针访问子类成员 C++

    我有一系列自定义类 Student 对象 CourseStudent和ResearchStudent都继承自Student 并且Student的所有实例都是其中之一 我有一个函数来遍历数组 确定每个学生的子类型 然后对它们调用特定于子类型的
  • 将 adb 与具有相同序列号的多个设备一起使用[重复]

    这个问题在这里已经有答案了 我的电脑连接了两个设备 但是当我启动adb时 它们的序列号都是 0123456789ABCDEF When I try to install an APK the installation fails with
  • Haskell:使用 $ 的函数应用

    在下面的代码片段中 您可以看到我用 Haskell 编写的两个 collat z 函数 对于递归应用程序 我在第一个示例 collat z 中使用括号来获得正确的优先级 由于我刚刚学习了 的函数应用 我尝试使用那个东西重写函数 collat