【问题标题】:Having trouble translating code from Haskell to SML将代码从 Haskell 转换为 SML 时遇到问题
【发布时间】:2020-08-15 03:39:06
【问题描述】:

我正在尝试将以下代码从 SML 转换为 haskell,但遇到了一些麻烦。

type List_alg x u = (u, x->u->u)
list_cata :: List_alg x u -> [x] -> u list_cata (a,f) = cata where
  cata[] =a
  cata (x:l) = f x (cata l)

这是我尝试过的:

type ('a, 'b) List_alg = 'b * ('a -> 'b -> 'b)

fun list_cata (((a, f): List_alg), (l: 'a list)): 'b = 
  case l of
       [] => a
     | x::xs => f x (list_cata ((a,f), xs))

我收到错误Error: type constructor List_alg given 0 arguments, wants 2 但我不确定出了什么问题/如何解决。任何帮助将不胜感激!

【问题讨论】:

  • 错误只是说List_alg不是类型,但('a, 'b) List_alg是。

标签: haskell functional-programming sml category-theory catamorphism


【解决方案1】:

List_alg 是一个类型构造函数,它需要两个参数,但您在第三行使用它时没有任何参数。尝试将其更改为('a, 'b) List_alg,如

fun list_cata (((a, f): ('a, 'b) List_alg), (l: 'a list)): 'b = 

请注意,您的 Haskell 实现也在 List_alg 之后通过 xu

【讨论】:

  • 谢谢!我只是在学习函数式编程。我想知道在 SML 中返回类似于 haskell 中的函数的正确方法是什么?在 Haskell 代码中有一行 cata where cata ...
  • @dtran 您可以以相同的方式返回函数,不确定问题出在哪里。无论如何,这是一个单独的问题,也许可以用一个例子再发一篇文章?
猜你喜欢
  • 2019-12-22
  • 1970-01-01
  • 2020-08-15
  • 1970-01-01
  • 2020-08-23
  • 2021-04-05
  • 1970-01-01
  • 2019-03-03
  • 2013-12-23
相关资源
最近更新 更多