您能告诉我如何在Ocaml中获取用户的输入吗?
它可以在以下链接中找到:
我是Ocaml的初学者,我试图让用户的输入运行
这是代码:
let rec hilo n =
let () = print_string "type a number: " in
let i = read_int ()
in
if i = n then
let () = print_string "BRAVO" in
let () = print_newline ()
in print_
我刚接触过这门语言/技术,我有一个简单的问题,但我找不到答案:
我想创建一个Module,您可以在其中输入OCaml简单的函数/赋值,如下所示
let rec gcd (m, n) = if m = 0 then n
else gcd (n mod m, n);;
let one = 1;;
let two = 2;;
将这些函数用于其他程序OCaml
最近,我正在读一些有关Haskell的函数式编程书籍。
例如,Haskell似乎很喜欢“模块化程序”,
f :: (Integer,Integer) -> Integer
f = sum . map sq . filter . odd . between
即使相同的函数可以编写成
f' (m, n) = go m
where go m | m > n = 0
| otherwise = go (m + 1) + if odd m then sq m else 0
“融合定律”也很受欢迎和使用()
我不是OCaml专家,但如果可能的话,我会使用
我正在尝试在Ocaml 4.02.5版本中构建一个词法分析器,我似乎不能让流类型工作,而且我几乎找不到任何对Ocaml有用的东西。我读到的大多数东西都过于复杂,没有从文件中获取char输入并对其进行词法分析的示例。
我收到的错误是在我的第一个流声明中,特定的语法位置在'[<‘部分。
open Printf;;
open Stream;;
type sign =
Plus
| Minus;;
type atom =
T
| NIL
| Int of int
| Ident of string;;
type token
我正在尝试创建一个函数来删除列表的前n项:
let rec drop n h =
if n == 0 then h else (drop n-1 (match h with a::b -> b));;
这就是给予:
Characters 43-49:
if n == 0 then h else (drop n-1 (match h with a::b -> b));;
^^^^^^
Error: This expression has type 'a -> 'b but is here used
我写了myPercolation.ml。
open MyUnionFind
module type MyPercolationSig = sig
type percolation
val create_percolation : int -> percolation
val open_site : percolation -> int -> int -> unit
val is_open : percolation -> int -> int -> bool
val is_full : percolation -> int
如何在Mac上安装当前的Frama-C版本及其必备组件?
我已经知道了Frama-C,另一所大学的一位同事推荐了它。
我之前曾尝试安装Frama-C,但失败得很糟糕。这位同事评论说,他也有过同样的经历。好吧,时代不同了。
frama-c.com下载页面没有任何平台的当前(Flourine 3)版本的二进制文件的链接。指向安装说明的链接会将我带到一个页面,上面显示要下载自动安装程序。什么自动安装程序?
有针对旧版本Mac的说明,但遵循这些说明并不起作用;按照说明加载一组必备组件会产生无法安装下一个必备组件(gtksourceview)的状态。
当然,我检查了较旧的版本,我看到Mac OS X
我正在用ocaml开发一个项目,它需要我将它与OGDF外部c++库接口。这一切都在我的mac上运行,但现在我正试图使用Ocaml for windows (),即MinGW Cygwin的Ocaml port创建一个Windows版本。在这个版本中,我可以将ocaml与C代码接口,它工作得很好,但只要我尝试在C代码中包含一个外部库,我就会收到来自链接器错误,在本例中是flexdll ()。链接器说它无法在整个库中解析_Unwind_Resume和__emutls_get_address的符号。
下面是一个玩具示例:
我的.ml文件t.ml:
external print : unit ->
在ocaml中,假设我们有:
type t = A of int | B of string
let x = [A 5; B "y"]
然后,我们可以迭代列表,并使用match语句来决定如何处理A或B。
在java中,我们可以有:
ArrayList<Object> x = new ArrayList<Object>();
x.add(new Integer(5));
x.add("y");
在数组列表迭代中,我们必须使用instanceof和downcast来处理数据。
在内部,ocaml是否将运行时类型信息作为java携带,并且类型匹
我拥有ocaml 3.12,一年没有使用,现在从git升级到4.03 (自己编译)。我在网上看到一些评论,说这个版本不包括camlp4o,我的是从2010年开始的,那时我甚至还没有安装ocaml。问题是,我无法编译一个程序,因为它。我在硬盘上找到了那个文件,我没有发现任何问题,但是如果我试图从终端执行,我就得到了这个
79-116-202-72:ocaml Cristi$ camlp4o
Fatal error: the file '/usr/local/bin/camlp4o' is not a bytecode executable file
其他卡米尔文件也是一样的。希望
我通过安装OcamlWinPlus及其组件Emacs来使用Ocaml。在我的源代码中,我有两个文件main.ml和lexer.mll,它们的代码如下:
main.ml:
open Format
let print data =
List.iter (fun l -> printf "%s@." (String.concat " " l)) data
let () =
match List.tl (Array.to_list Sys.argv) with
| [filename] ->
let ch = open_in f
背景信息(您不需要重复这些步骤来回答问题,这只是提供了一些背景信息):
我正在尝试编译。这些文件是原型Modelica到OCaml编译器的输出,反映了的Modelica类结构。
主要特性是使用多态的开放递归:每个方法都接受一个包含最终超类层次结构的this参数。因此,例如,模型:
model A type T = Real type S = T end A;
翻译成
let m_A = object
method m_T this = m_Modelica_Real
method m_S this = this#m_T this
这是我的代码,我需要一些帮助。编译器给了我一些语法错误,我无法修复,也无法识别!
let n = read_int();
let schroder n =
let pointer = ref 0 in
for i = 1 to n-2 do
pointer := !pointer + (schroder i * schroder n-i-1)
done;
schroder n = 3 * schroder n-1 + !pointer
!schroder n
我有一组protobuf类型,并希望生成用于序列化的reasonML代码。到目前为止,我发现ocaml-protoc无法安装到我的系统上。使用docker,
FROM ocaml/opam:alpine
RUN opam remote add dev git://github.com/mirage/mirage-dev
RUN opam depext -i mirage
RUN opam depext conf-m4.1
RUN yes | opam install ocaml-protoc
然后运行命令:
docker run \
--mount type=bind,sou
我在OCaml的程序中有一个bug,我正在寻求帮助。
错误:
This expression has type unit but an expression was expected of type int
包含错误的行错误包含soma = soma。
let soma = 0;;
let rec nBell n =
if n == 0 then 1
else
for k=0 to n-1 do
soma = soma + ((fact(n-1)/(fact(k)*fact((n-1)-k))) * nBell(k));
d