小编cag*_*ago的帖子

约束多态类型

我有一个范围类型定义为:

type 'a range = Full | Range of ('a * 'a)
Run Code Online (Sandbox Code Playgroud)

但是,我想将'a'限制为整数或浮点数或字符,而没有其他有效类型的'a.

Range(0,10) (* valid *)
Range(0.0, 10.0) (* valid *)
Range('a', 'z') (* valid *)
Range("string1", "string2") (* other types like this shouldn't type check *)
Run Code Online (Sandbox Code Playgroud)

我想我可以将我的类型定义更改为:

type sequential   = S_int of int | S_float of float | S_char of char ;;
type range = Full | Range of (sequential * sequential);;
Run Code Online (Sandbox Code Playgroud)

但是,这将允许以下内容:

Range(S_int(0), S_float(10.0));; (* problem: mixes int and float *)
Run Code Online (Sandbox Code Playgroud)

...但我希望Range的两个组件都是相同的类型.

我想另一种方法是创建一个int_range类型,一个float_range类型和一个char_range类型,但我想知道是否还有另一种方法?

ocaml types functional-programming

12
推荐指数
2
解决办法
215
查看次数

删除重复的字符串和空字符串

let undefined = ["string"; ""; "string"; "boolean";"";"innermost"]
Run Code Online (Sandbox Code Playgroud)

我有一个列表,我想编写一个函数,返回一个没有重复和空字符串列表的列表.例如,undefined上面的列表将返回:

["string"; "boolean"; "innermost"]
Run Code Online (Sandbox Code Playgroud)

我写这个函数它为我返回没有重复,但我怎么能添加测试空字符串的条件.

let rec uniquify = function
| [] -> []
| x::xs -> x :: uniquify (List.filter ((<>) x) xs)
Run Code Online (Sandbox Code Playgroud)

非常感谢你

ocaml functional-programming

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

OCaml中对象内的对象

我试图找出如何用其他对象参数化OCaml对象.具体来说,我希望能够创建一个link包含前向node对象和后向node对象的对象,我希望能够通过以下方式创建链接:

let link1 = new link node_behind node_ahead;;
Run Code Online (Sandbox Code Playgroud)

oop ocaml object

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

标签 统计

ocaml ×3

functional-programming ×2

object ×1

oop ×1

types ×1