小编Sof*_*mur的帖子

OCaml中模块的继承

我已经定义了一个接口和一个模块:

module type BASE =
  sig
    type 'a base
    val ...
    ...
  end

module base =
  (struct
    type 'a base
    let ...
    ...
  end: BASE) 
Run Code Online (Sandbox Code Playgroud)

我想定义另一个DERIVED继承自的接口BASE,它包含所有类型和签名BASE,并有自己的类型和声明.然后我可以定义另一个Derived类型为的模块DERIVED.

谁能告诉我怎么做?它是否必然是OCaml的对象特征?

更进一步,是否可以更改类型的名称DERIVED:例如,它被调用'a derived而不是' a base

inheritance ocaml module

2
推荐指数
1
解决办法
1163
查看次数

"failwith"不再被允许?

我有一个.ml在我的定义中编译的列表makefile,完成后main/mail.ml.

failwith "to do"在这些文件中有一些函数体.之前,我记得它只在运行时执行需要该函数时引发错误.

今天我所有的编译.ml工作正常:.cmi,cmx并且.o都产生.但是,当我启动主要的二进制文件,它似乎并没有先运行是什么let ()main.ml,相反,它似乎检查首先列表的文件.mlmakefile,并提出Fatal error: exception Failure("to do") make: *** [all] Error 2当遇到第一个faiwith "to do".

我发现这种行为很奇怪,谁能告诉我可能是什么原因?我makefile或者有什么问题main.ml

ocaml makefile runtime compilation

2
推荐指数
1
解决办法
523
查看次数

键盘快捷键切换窗口

我正在使用drschemedrracketscheme.我发现这个的键盘快捷键,但Ctrl+ F6似乎不起作用...

如何在两个窗口/编辑器之间切换光标:定义和交互?

scheme keyboard-shortcuts racket

2
推荐指数
1
解决办法
361
查看次数

List.mem的复杂性

我有一个操作列表的算法,我想表达它的复杂性.

在算法中,我有List.mem a l一个循环,我不知道如何考虑复杂性List.mem,必须是O(List.length(l)),或者Ocaml可以做一些神奇的内部更好O(List.length(l))

algorithm complexity-theory ocaml list

2
推荐指数
1
解决办法
411
查看次数

寻找用OCaml编写的VBA/VB解析器/编译器

我打算编写一个编译器(包括解析器)OCaml来解析和运行VBA或/和VB程序.我已经为简单的命令式语言做了这个,但我不知道如何处理VBAor和VB... 的"对象"功能.

有谁知道我能激发的任何现有工作吗?

vb.net compiler-construction parsing vba ocaml

2
推荐指数
1
解决办法
685
查看次数

在 Excel 中自动添加加载项的单个菜单项

我使用的是 Windows 版 Microsoft Excel 2010。

我已经开发了一个加载项addin.xlam,其中包含一个 sub main. addin.xlam位于正确的位置,以便通过菜单可见和选择Developer -> Add-Ins。当我打开普通工作簿test.xlsm并按 时Alt + F11,我可以看到 的代码addin.xlam已加载。

我的目标是向 Excel 的菜单栏添加一个菜单项,以允许用户main启动add-in.xlam. 通过点击此链接,我的代码addin.xlam如下:

Option Explicit
Dim cControl As CommandBarButtonPrivate
Sub Workbook_AddinInstall()
    On Error Resume Next 'Just in case

    'Delete any existing menu item that may have been left.
    Application.CommandBars("Worksheet Menu Bar").Controls("Super Code").Delete

    'Add the new menu item and Set a CommandBarButton Variable to …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-addins

2
推荐指数
1
解决办法
1万
查看次数

关闭录制的VBA宏的R1C1参考样式

在录制的VBA宏中,似乎他们的公式使用R1C1 reference style.例如,填写B4B2+1:

Range("B4").Select
ActiveCell.FormulaR1C1 = "=R[-2]C+1"
Run Code Online (Sandbox Code Playgroud)

有谁知道是否可以关闭此模式?例如,让录制的宏看起来像:

Range("B4").Select
ActiveCell.Formula = "=B2+1"
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

2
推荐指数
1
解决办法
2万
查看次数

在OCaml中设置二维数组的功能

我正在编写二维数组的基本函数.有两种方法可以编写"set"功能.第一个是制作矩阵的副本然后修改它:

let copy_matrix (m: 'a array array): 'a array array =
  let l = Array.length m in
    if l = 0 then m else
      let result = Array.make l m.(0) in
        for i = 0 to l - 1 do
           result.(i) <- Array.copy m.(i)
        done;
        result

let set_copy (m: 'a array array) (r: int) (c: int) (v: 'a): 'a array array =
  let m' = copy_matrix m in
  m'.(r).(c) <- v;
  m'
Run Code Online (Sandbox Code Playgroud)

第二个只是直接在矩阵上修改:

let set (m: 'a array array) (r: …
Run Code Online (Sandbox Code Playgroud)

arrays ocaml memory-management multidimensional-array

2
推荐指数
1
解决办法
1575
查看次数

打破OCaml中的循环

我经常需要在OCaml中打破一个循环,至少有两种方法:

(* by exception *)
try
  for i = 0 to 100 do
    ...
    if cond then raise BreakLoop
  done;
...
with BreakLoop -> ...

(* by while *)
let cond = ref false in
let i = ref 0 in
while (not !cond) && (i<= 100) do
  ...
  i := !i + 1
done;
if !cond then ...
Run Code Online (Sandbox Code Playgroud)

我最关心的是优化运行时间,只要程序易于阅读和理解即可.while当存在多个嵌套循环时,这种方式使循环变得复杂.

我在互联网上的某个地方看到,在OCaml中抛出和捕获异常代价很高.任何人都可以确认我是否属实?

所以我们有时应该采用这种while方式,有时使用exception方式?

ocaml exception-handling exception

2
推荐指数
1
解决办法
2544
查看次数

跳过自动弹出"以只读方式打开?"

我现在使用以下命令逐个打开一组工作簿:

Workbooks.Open Filename:=file, Password:="" 
Run Code Online (Sandbox Code Playgroud)

通常文件notread-only模式下打开,这就是我想要的.但是对于某些文件,前一行弹出以下窗口:

在此输入图像描述

在这种情况下,我仍然想打开文件(cliking Yes),甚至认为会read-only.谁能告诉我如何通过命令VBA自动化这个选择,而不是点击?

excel vba excel-vba

2
推荐指数
1
解决办法
5万
查看次数