在ocaml中编写多行函数

2024-03-09

我无法理解如何在 ocaml 中编写函数,因为我只编写了不需要用 分隔的多行的递归函数;.

我正在尝试创建一个函数,给定一个整数 n 返回一个充满零且对角线上只有一个的矩阵,因此大小为 n 的单位矩阵。
我是函数式编程和 ocaml 的新手,所以我想知道是否可以以命令式方式编写它。 例如在 Java 中我会写:

public int[][] identity(int size) {
    int[][] matrix;
    matrix = new int[size][size];
    //fill the matrix with zeroes
    for( int i=0; i<size; i++){
        for( int j=0; j<size; j++){
            matrix[i][j] = 0;
        }
    }
    //diagonal values at 1
    for (int i=0; i<size; i++){
        matrix[i][i] = 1;
    }
    return matrix;
}

我怎样才能在ocaml中实现这一点?


是的,您可以以命令式方式编写 OCaml 代码。 OCaml 有矩阵(表示为数组的数组),矩阵是可变的,并且它有一个for陈述。因此,您可以编写与 Java 中编写的代码非常相似的代码。

然而,学习 OCaml 只是为了编写命令式代码,这似乎很遗憾!

以下是一些可以组合在一起的代码片段:

# let m = Array.make_matrix 3 3 0;;
val m : int array array = [|[|0; 0; 0|]; [|0; 0; 0|]; [|0; 0; 0|]|]

# m.(1).(1) <- 1;;
- : unit = ()

# m;;
- : int array array = [|[|0; 0; 0|]; [|0; 1; 0|]; [|0; 0; 0|]|]

# for i = 0 to 9 do Printf.printf " %d" i done;;
 0 1 2 3 4 5 6 7 8 9- : unit = ()

OCaml 中的多行函数没有什么特别之处。这是一个执行三件事的函数。您可以将其写在一行或多行上:

let f x =
    Printf.printf "I will now write the value of x\n";
    Printf.printf "Here is the value of x: %d\n" x;
    Printf.printf "I just wrote the value of x\n"

在 OCaml 中,;习惯于separate应按顺序求值的表达式。即,没有;在最后一个表达式之后。

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

在ocaml中编写多行函数 的相关文章

  • F# 与 OCaml:堆栈溢出

    我最近发现了一个关于适合 Python 程序员的 F http combiol org fs FSUG FS4PPv2 pptx 看完之后 我决定自己实现一个 蚂蚁谜题 的解决方案 有一只蚂蚁可以在平面网格上走动 蚂蚁一次可以向左 向右 向
  • OCaml 中的函子

    我在函子 及其结果类型 方面遇到了一些问题 下面 我有一个Set使用一个函子Ordered类型 我实际上使用了set mlOCaml 附带提供一些指导 但我似乎正在做所有事情ahem正确的 我创建了一个Ordered模块与整数并将其应用到S
  • 如何在 JavaScript 中表示代数数据类型和模式匹配

    在像 OCaml 这样的函数式语言中 我们有模式匹配 例如 我想记录用户在我的网站上的操作 操作可以是 1 访问网页 2 删除项目 3 检查其他用户的个人资料等 在 OCaml 中 我们可以编写如下内容 type Action VisitP
  • 在 OCaml 中将哈希表转换为对(键,值)列表

    OCaml 中有没有办法将哈希表转换为 键 对 值列表 我知道 给定一个哈希表ht我们可以做的 BatList of enum BatHashtbl enum ht 使用电池库 这会将表转换为枚举 然后将枚举转换为列表 但我正在寻找一种不使
  • OCaml 是否复制了自定义块?

    想象一下 我有一个名为 libcat 的 C 库 用于与我的毛茸茸的猫进行交互 因此 我正在为 OCaml 编写绑定来简化与 fluffy 的交互 module type CAT sig type cat val find gt cat v
  • 在ocaml中编写多行函数

    我无法理解如何在 ocaml 中编写函数 因为我只编写了不需要用 分隔的多行的递归函数 我正在尝试创建一个函数 给定一个整数 n 返回一个充满零且对角线上只有一个的矩阵 因此大小为 n 的单位矩阵 我是函数式编程和 ocaml 的新手 所以
  • MonadFix 用严格的语言

    我正在为 Ocaml 中类似 haskell 的 do 表示法开发 camlp4 扩展 并试图弄清楚 GHC 如何编译递归 do 绑定 使用 XDoRec 启用 我想知道一元定点组合器是否可能以严格的语言存在 如 Ocaml F SML 如
  • 尝试使用转义字符时 OCaml 正则表达式有问题

    我正在尝试使用 OCaml 为 C 的变体编写一个词法分析器 对于词法分析器 我需要匹配字符串 和 分别作为幂和或符号 这两个都是正则表达式中的特殊字符 当我尝试使用反斜杠转义它们时 没有任何变化 代码运行时就好像 仍然是行首而 仍然是 或
  • llvm OCaml 绑定

    我正在研究 llvm OCaml 绑定 我通过 opam 安装了 llvm 包 opam install llvm 当我在 utop 中使用 llvm 时 出现以下错误 require llvm Error The external fun
  • Ocaml,用列表中的给定元素替换所有指定元素

    我正在编写一个 ocaml 项目 其中我有一个函数可以替换所有 在字符列表中 E 这是我的建议代码 let rec string lst change E lst match lst with gt let a E a h t if h g
  • Ocaml 中的 Socket onread、onready、onclose 事件处理函数

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

    我想知道如何在 OCaml 中设置文本大小 我试过Graphics set text size我想这应该可以达成交易 但无论我把set text size 200 or set text size 20并没有改变什么 Graphics se
  • OCaml 在运行时编译和加载

    我正在尝试实现类似的目标eval 在 OCaml 中 我有一个string我想从中得到一个 OCaml 函数 目前我正在做以下事情 我将字符串转储到new ml并编译文件 Compile implementation Format std
  • 使用 OCaml 收集外部命令的输出

    在 OCaml 中调用外部命令并收集其输出的正确方法是什么 在Python中 我可以做这样的事情 os popen cmd read 如何在 OCaml 中获取外部程序的所有输出 或者 更好的是 带有 Lwt 的 OCaml Thanks
  • 如何使用 opam 安装特定版本的 ocaml 编译器

    如何使用 opam 或其他包管理器 安装特定版本的 ocaml 编译器 和兼容包 我快速浏览了 opam 文档 但没有找到相关信息 我需要 ocaml 编译器 最好是本机代码编译器 来构建 unison 一个文件同步软件 我需要使用相同版本
  • 如何在 OCaml 中使协变可观察

    我正在尝试为值制作一个包装器 允许调用者自行注册以获取有关它的通知 这是一些 工作 代码 module Thing sig type a t val make a gt a t val watch a gt unit gt a t gt u
  • 在 OCaml 自定义顶层设置提示

    在 OCaml 自定义顶层中 有没有一种方法可以通过编程方式设置提示 到别的东西 我希望能够更改它以响应用户的最后一个自定义功能 有点像bash你如何设置PS1 我什至找不到 directive 来更改它 谢谢 在 toplevel top
  • OCaml 2 和 3 之间的差异

    我有兴趣学习这门语言 但似乎有关该主题的教程和书籍很少 我只找到一本关于这个主题的合适的书 用 Objective Caml 这绝对是完美的 但问题是它是基于 2 04 版本的 所以我唯一关心的是使用这本书 对于 OCaml 3 x 是否会
  • OCaml 中的用户定义打印机

    printf fprintf等 全部接受 a转换 手册上说对于 a 用户定义的打印机 采用两个参数 并将第一个参数应用于 outchan 当前输出通道 和第二个参数 因此 第一个参数的类型必须为 out channel gt b gt un
  • OCaml 作为 C 库,hello world 示例

    我希望通过 C 调用 OCaml 代码 方法是将 OCaml 编译为包含 C 接口的静态或共享库 这一页 https caml inria fr pub docs manual ocaml intfc html似乎解释了如何为 OCaml

随机推荐