当前位置: 首页 > 知识库问答 >
问题:

isPalindrome的Haskell单子

巩俊远
2023-03-14
isPalindromeM :: (Eq a) => [a] -> Bool
isPalindromeM = reverse >>= (==)

共有1个答案

蒋联
2023-03-14

我花了一些时间才找到单子,由于它与列表无关,我想我应该发布一个答案。

表达式reverse>>=(==)暗示reverse的类型是M A,对于某些单子M,因此M A是类型[c]->[c]。我们还需要ispalindromem具有[c]->bool类型,并且绑定表达式暗示m b[c]->bool相同。最后,此上下文要求(==)::[c]->[c]->bool具有a->m b类型。

因此,我们推导出a[c]Bbool,单子M接受类型a并将其发送到函数类型[c]->a。这表明发挥作用的单子是单子((->)[c])。此处定义

 类似资料:
  • 我刚开始学习Haskell,但是现在没有循环是非常令人沮丧的。我想出了如何为函数编写循环。然而,我的问题是,我想在迭代循环时输出一些结果。似乎我必须使用debug来执行这个简单的任务。 所以现在我只想举一个例子,说明如何在主结构中打印字符串10次。 换句话说,我想这样做10次: 谢谢。我觉得这对我的任务很有启发。

  • 我想知道在检查字符串是否为回文时,如何修改以下方法以忽略某个字母并将其作为通配符。。。 示例:“wow”,在这种情况下,该方法应该返回false,但 “pat”,“t”可以是通配符(被视为p),因此返回true “job”,b也可以是通配符并被视为j,因此方法返回true。 这就是我到目前为止所拥有的,我有一个单独的方法忽略特殊字符和空格,因此不需要在这篇文章中考虑。 这是我的测试课, isPal

  • 本文向大家介绍Haskell基本清单理解,包括了Haskell基本清单理解的使用技巧和注意事项,需要的朋友参考一下 示例 Haskell具有列表理解,这很像数学中的集合理解,以及类似命令式语言(如Python和JavaScript)的类似实现。最基本的列表理解采用以下形式。 例如 函数也可以直接应用于x: 这等效于: 例:            

  • Haskell是一种纯函数式编程语言,它的命名源自美国数学家Haskell Brooks Curry,他在数学逻辑方面上的工作使得函数式编程语言有了广泛的基础。Haskell语言是1990年在编程语言Miranda的基础上标准化的,并且以λ演算为基础发展而来。这也是为什么Haskell语言以希腊字母“λ”(Lambda)作为自己的标志。Haskell语言的最重要的两个应用是Glasgow Hask

  • Haskell中的Zippers是一个指向数据结构(例如树)的某些特定位置的指针。 假设具有5个元素的树,可以将其表示为完全二叉树。如果要更新此列表的最后一个元素,则需要遍历所有元素以到达最后一个元素,然后再进行更新。 但是,如果我们以具有N个元素的树是的集合的方式构造树,那该怎么办? 那么,可以不需要遍历所有不需要的(N-1)个元素。直接更新第N个元素,这正是Zipper的概念。它聚焦或指向树的