与 Python 的 range 函数等效的 OCaml 习惯用法是什么?

2024-01-10

我想创建一个从 1 到 的整数列表n。我可以在 Python 中使用range(1, n+1),并在 Haskell 中使用:take n (iterate (1+) 1).

正确的 OCaml 习惯用法是什么?


我不知道有什么习惯用法,但这里有一个使用中缀运算符的相当自然的定义:

# let (--) i j = 
    let rec aux n acc =
      if n < i then acc else aux (n-1) (n :: acc)
    in aux j [] ;;
val ( -- ) : int -> int -> int list = <fun>
# 1--2;;
- : int list = [1; 2]
# 1--5;;
- : int list = [1; 2; 3; 4; 5]
# 5--10;;
- : int list = [5; 6; 7; 8; 9; 10]

或者,推导式语法扩展 http://dutherenverseauborddelatable.wordpress.com/downloads/comprehension-for-ocaml/(给出语法[i .. j]对于上述内容)可能会包含在未来版本中OCaml 的“社区版” http://forge.ocamlcore.org/projects/batteries/,这样这可能会成为惯用语。不过,如果您是该语言的新手,我不建议您开始使用语法扩展。

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

与 Python 的 range 函数等效的 OCaml 习惯用法是什么? 的相关文章

  • 在 OCaml 中读取 URL 的 HTML 内容

    我想编写一个 OCaml 函数 它接受一个 URL 并返回一个由该位置的 HTML 文件内容组成的字符串 有任何想法吗 多谢 最好的 苏里卡托 我已经使用 ocurl 和 nethtml 完成了这两件事 ocurl http sourcef
  • 什么时候应该在 OCaml 中使用对象?

    通常 OCaml 程序可以使用或不使用对象来编写 什么时候使用物品最有利 什么时候应该避免使用物品 作为一般经验法则 不要使用对象 它们带来的额外复杂性通常并不值得 我认为这也是适用于其他语言的规则 但那是另一回事了 至少对于 OCaml
  • 如何设置Emacs默认编译目录?

    我正在 Emacs 下编写 OCaml 代码 我有一个makefile在工作文件夹中 以及几个包含以下内容的子文件夹 ml文件 如果我启动M x compile and make在缓冲区上工作正常makefile 但不适用于 a 的缓冲区
  • Ocaml - 多态打印和类型丢失

    OCaml中有print int print endline Printf等一系列函数 我不能做这样的事情 let n 10 in print n And I haven t to change print in case type of
  • 在使用 Base 的 OCaml 中,如何构造一个包含“int * int”类型元素的集合?

    在 F 中 我只需执行以下操作 gt let x Set empty val x Set lt a gt when a comparison gt Set add 2 3 x val it Set
  • 跟踪编译器中 AST 节点的源位置 (ocaml)

    我正在使用 ocamllex yacc 在 ocaml 中编写编译器 一切进展顺利 但我遇到了设计问题 对于我创建的每个 AST 节点 最好能获得有关源代码中该节点的行 字符位置的信息 这对于稍后向用户提供错误消息很有用 现在 我可以向我的
  • 如何让 ocaml 相信两个函子实例化是相等的

    假设我有许多模块 它们都使用一种模块类型进行参数化 并且彼此之间也具有依赖关系 module type AT sig end module B A AT struct module Hash struct type t int let eq
  • OCaml 是否复制了自定义块?

    想象一下 我有一个名为 libcat 的 C 库 用于与我的毛茸茸的猫进行交互 因此 我正在为 OCaml 编写绑定来简化与 fluffy 的交互 module type CAT sig type cat val find gt cat v
  • OCaml 的并行化能力状况如何?

    我对在项目中使用 OCaml 很感兴趣 但是我不确定它的并行化功能在哪里 OCaml中有消息传递能力吗 OCaml 是否能够有效地使用 1 个以上的 CPU 我读到的关于这个主题的大部分内容都是在 2002 年至 2006 年写的 我没有看
  • OCaml:从列表中删除重复项,同时保持右侧的顺序

    我刚刚读过这个线程 https groups google com d msg racket users BuUzcJtd3Ig zqYIjVyJdjoJ并觉得很有趣 我实施remove from the left几分钟后即可运行 remo
  • 使用 Opam 管理项目依赖关系

    我是 OCaml 的新手 我使用过的其他语言 例如 Scala Clojure Node js 上的 Javascript 都有包管理器 允许人们以干净的状态启动项目 该项目具有一组已声明的已知版本的依赖项 我正在尝试与 Opam 做类似的
  • OCaml 数据类型定义中的方括号“[”和“]”是什么意思?

    I saw 下列 https coq github io doc v8 11 api coq Genarg index html type rlevel type rlevel rlevel 但我以前从未见过这种情况 并且 ADT 代数数据
  • Ocaml 中的 Socket onread、onready、onclose 事件处理函数

    我正在 Ocaml 中使用 TCP IP 套接字开发协议 并且我有兴趣实现事件驱动方法 基本上 我想创建事件处理函数 每当套接字接收到新数据或关闭或打开时调用 是否可以在 Ocaml 中完成而无需使用多线程手动实现 Thanks 是的 制作
  • 将 OCaml 转换为 F#:将 OCaml open_box 和 close_box 转换为 F#

    我正在将几个基于 OCaml 的模块转换为 F 并遇到了 OCaml 打印格式化函数open box 和 close box http caml inria fr pub docs manual ocaml libref Format ht
  • 使用 OCaml 收集外部命令的输出

    在 OCaml 中调用外部命令并收集其输出的正确方法是什么 在Python中 我可以做这样的事情 os popen cmd read 如何在 OCaml 中获取外部程序的所有输出 或者 更好的是 带有 Lwt 的 OCaml Thanks
  • 错误:无法安全地评估递归定义模块的定义

    我很想了解为什么会发生此错误以及解决该错误的最佳方法是什么 我有几个文件types ml and types mli它定义了一个变体类型value可以是许多不同的内置 OCaml 类型 float int list map set 等 由于
  • OCaml 中的线性类型

    Rust http www rust lang org 有一个线性类型系统 有什么 好的 方法可以在 OCaml 中模拟这个吗 例如 当使用 ocaml lua 时 我想确保仅当 Lua 处于特定状态 堆栈顶部的表等 时才调用某些函数 Ed
  • 链接“let”语句时使用“and”还是“in”更好?

    我意识到这可能是一个愚蠢的问题 但是 如果我把一堆let不需要需要了解彼此价值观的语句 使用是否更好and or in 例如 以下哪一个更可取 如果有 let a foo and b bar and c baz in etc or let
  • 为什么在 OCaml 中更喜欢柯里化而不是元组参数?

    Caml简介 http www cs jhu edu scott pl lectures caml intro html says 请注意 在 Caml 中 最好对多参数函数使用柯里化函数定义 而不是元组 比较时 a gt b gt c调用
  • ocaml 命令行找不到“topfind”

    我已经安装了opam run opam init run opam switch 4 06 0这创造了一个4 06 0里面的目录 opam 运行 评估opam confing env 出口 OCAML TOPLEVEL PATH as op

随机推荐