如何编写函数以在OCaml中创建列表的循环版本?

雨果

可以使用let rec创建无限的循环列表,而无需求助于可变引用:

let rec xs = 1 :: 0 :: xs ;;

但是我可以使用相同的技术来编写一个接收有限列表并返回其无限循环版本的函数吗?我尝试写作

let rec cycle xs = 
    let rec result = go xs and
            go = function
              | [] -> result
              | (y::ys) -> y :: go ys in
    result
;;

但是出现了以下错误

错误:不允许这种表达式作为`let rec'的右侧

卡姆斯波特

您的代码有两个问题:

  • result = go xs 是非法形式 let rec
  • 该函数尝试通过某种计算创建一个循环,该循环陷入无限循环,从而导致堆栈溢出。

上面的代码被编译器拒绝了,因为您不能在右侧写一个可能导致递归计算的表达式let rec(请参阅OCaml中let rec的限制)。

即使解决了问题,您仍然遇到问题:cycle无法完成工作:

let rec cycle xs =
  let rec go = function
    | [] -> go xs
    | y::ys -> y :: g ys
  in
  go xs;;

cycle [1;2];;

cycle [1;2] 由于堆栈溢出而失败。

在OCaml中,let rec仅当其定义为“静态”且不执行任何计算时,才可以定义循环结构。let rec xs = 1 :: 0 :: xs就是这样一个例子:(::)不是函数而是构造函数,它只是构造数据结构。另一方面,cycle执行一些代码执行以动态创建结构并且它是无限的。恐怕您不能像cycle在OCaml中那样编写函数

如果要cycle在OCaml等数据中引入一些循环,可以使用惰性结构来防止立即无限循环(例如Haskell的惰性列表),或者使用变体通过替换来构成循环。OCaml的列表不是惰性的也不是可变的,因此您不能编写动态构造循环列表的函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Powershell中编写函数以创建函数

来自分类Dev

如何在Powershell中编写函数以创建函数

来自分类Dev

如何在R中编写递归函数以生成动态嵌套的for循环?

来自分类Dev

如何在OCaml中编写列表?

来自分类Dev

循环或函数以创建新列并根据列表进行填充

来自分类Dev

如何编写函数以测试链接列表是否已排序

来自分类Dev

如何创建循环或函数以循环浏览两个包含变量的向量列表,以在响应上运行KS测试

来自分类Dev

如何创建递归函数以创建值列表

来自分类Dev

在for循环内调用函数以删除向量(或列表)中的元素

来自分类Dev

如何编写通用函数以在 C 中重用

来自分类Dev

如何在R中创建函数以创建列的子集?

来自分类Dev

如何使用for循环编写用于访问R中列表元素的函数?

来自分类Dev

如何创建(C)函数以使用“读取”将文件中的数据读取到链接列表中?

来自分类Dev

如何编写此迭代函数以递归?

来自分类Dev

编写函数以计算R中的除数

来自分类Dev

如何更正此函数以在Tkinter Python中创建标签?

来自分类Dev

如何编写帮助程序函数以将NSDictionary读/写到“属性列表”?

来自分类Dev

编写MapReduce函数以计算由不同用户在MongoDB中创建的帖子数

来自分类Dev

在JQuery中创建函数以避免再次编写相同的代码

来自分类Dev

如何在函数中编写函数以将对象保存为单独的 csv 文件?

来自分类Dev

如何编写一个函数,该函数根据多维对象中嵌套的数量自动为循环创建...?

来自分类Dev

在C ++标准模板库(STL)中列出。我编写了以下程序,但我不知道如何制作函数以打印列表

来自分类Dev

如何编写自定义函数以显示数据框中每个变量的值计数以及级别?

来自分类Dev

Python:编写函数以检查列表并返回值或无

来自分类Dev

如何在JavaScript中创建构造函数以创建构造函数?

来自分类Dev

从循环中计算函数以将其应用到数据框列表中

来自分类Dev

我应该使用DeviceContext函数以循环方式还是通过创建方式在管道中输入?

来自分类Dev

如何在Excel中编写比率函数以使总和为100?

来自分类Dev

如何编写JS函数以从字符串中删除某些符号的数组

Related 相关文章

  1. 1

    如何在Powershell中编写函数以创建函数

  2. 2

    如何在Powershell中编写函数以创建函数

  3. 3

    如何在R中编写递归函数以生成动态嵌套的for循环?

  4. 4

    如何在OCaml中编写列表?

  5. 5

    循环或函数以创建新列并根据列表进行填充

  6. 6

    如何编写函数以测试链接列表是否已排序

  7. 7

    如何创建循环或函数以循环浏览两个包含变量的向量列表,以在响应上运行KS测试

  8. 8

    如何创建递归函数以创建值列表

  9. 9

    在for循环内调用函数以删除向量(或列表)中的元素

  10. 10

    如何编写通用函数以在 C 中重用

  11. 11

    如何在R中创建函数以创建列的子集?

  12. 12

    如何使用for循环编写用于访问R中列表元素的函数?

  13. 13

    如何创建(C)函数以使用“读取”将文件中的数据读取到链接列表中?

  14. 14

    如何编写此迭代函数以递归?

  15. 15

    编写函数以计算R中的除数

  16. 16

    如何更正此函数以在Tkinter Python中创建标签?

  17. 17

    如何编写帮助程序函数以将NSDictionary读/写到“属性列表”?

  18. 18

    编写MapReduce函数以计算由不同用户在MongoDB中创建的帖子数

  19. 19

    在JQuery中创建函数以避免再次编写相同的代码

  20. 20

    如何在函数中编写函数以将对象保存为单独的 csv 文件?

  21. 21

    如何编写一个函数,该函数根据多维对象中嵌套的数量自动为循环创建...?

  22. 22

    在C ++标准模板库(STL)中列出。我编写了以下程序,但我不知道如何制作函数以打印列表

  23. 23

    如何编写自定义函数以显示数据框中每个变量的值计数以及级别?

  24. 24

    Python:编写函数以检查列表并返回值或无

  25. 25

    如何在JavaScript中创建构造函数以创建构造函数?

  26. 26

    从循环中计算函数以将其应用到数据框列表中

  27. 27

    我应该使用DeviceContext函数以循环方式还是通过创建方式在管道中输入?

  28. 28

    如何在Excel中编写比率函数以使总和为100?

  29. 29

    如何编写JS函数以从字符串中删除某些符号的数组

热门标签

归档