标签: ml

什么语言实现函数式编程的功能?

Lisp在学术界很早就开发了一套有趣的语言功能,但大多数都没有在生产环境中流行.

有些语言,比如JavaScript,改编了基本功能,如垃圾收集和词法闭包,但所有可能实际上改变你大规模编写程序的东西,比如功能强大的宏,代码作为数据的东西和自定义控件结构,似乎在其他功能语言中传播,其中任何一种都不适用于非平凡的项目.

功能编程社区还提出了许多其他有趣的想法(除了函数式编程本身),如引用透明性,通用案例表达式(即模式匹配,不像C/C#开关那样残缺)和curried函数,似乎在常规编程中显然很有用,并且应该很容易与现有的编程实践集成,但由于某种原因似乎永远陷入了学术界.

为什么这些功能很难被采用?是否有任何现代的,实用的语言实际上是从Lisp中学习而不是半复杂地复制"一流的功能",还是存在使这不可能的内在冲突?

lisp enterprise haskell functional-programming ml

1
推荐指数
8
解决办法
1544
查看次数

从类型来编写满足类型的函数

这个问题来自考试.我不知道该怎么做.:-(

问题:给出一个类型为haskell或ml函数的示例

(a - > b) - >(c - > a) - > c - > b

怎么做?

haskell types functional-programming ml

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

在SML中,你能将".3"转换为真正的"0.3"吗?

我是SML的新手,我一直在使用SML/NJ.假设我有以下简单的功能:

fun test(x) = x / 2.0;
Run Code Online (Sandbox Code Playgroud)

试验(0.3); 返回0.15.

我希望它也能用于测试(.3); 现在我收到以下错误:

- test(.3);
stdIn:23.6-23.9 Error: syntax error: deleting  DOT INT RPAREN
Run Code Online (Sandbox Code Playgroud)

当然,我希望它可以与任何形式的0.X一起使用.这可行吗?谢谢!

ml sml smlnj

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

在标准ML数据类型中键入具有相同构造函数名称的冲突

我需要在Standard-ML中描述一种由属性和值组成的语言.我的属性系统由可以具有值的属性组成,例如:

color: red | yellow | blue | transparent
align: left | center | right
bgcolor: red | yellow | blue | transparent
Run Code Online (Sandbox Code Playgroud)

我创建了这个sml文件,试图描述这些属性:

datatype colorvalue = Transparent
                    | Yellow
                    | Blue
                    | Red

datatype bgcolorvalue = Transparent
                      | Yellow
                      | Blue
                      | Red

datatype alignvalue = Left
                    | Center
                    | Right

(* Generic property: it can be any of the above *)
datatype property = Color of colorvalue
                  | BgColor of bgcolorvalue
                  | Align of alignvalue

(* Some values …
Run Code Online (Sandbox Code Playgroud)

ml sml

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

在SML中int - > int - > int和(int*int) - > int有什么区别?

我注意到有两种方法可以在SML中定义函数.例如,如果你使用add函数,这有以下两种方式:

fun add x y = x+y;

fun add(x,y) = x+y;
Run Code Online (Sandbox Code Playgroud)

第一种方法创建函数类型:

val add = fn : int -> int -> int
Run Code Online (Sandbox Code Playgroud)

第二个创建函数类型:

val add = fn : int * int -> int
Run Code Online (Sandbox Code Playgroud)

这两种类型对于同一功能有什么区别?还有为什么同一功能有两种类型?

functional-programming ml sml smlnj

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

匹配变量(或以其他方式引入匹配逻辑的抽象)

可以匹配文字(显然):

let res = match x with 
  | "abc" -> 1
  | "def" as x -> something_else x
Run Code Online (Sandbox Code Playgroud)

:但是,是否可以匹配变量的值,因此在整个代码中不会重复文字?

let abc = "abc"
let def = "def"
let res = match x with
  | (abc) -> 1
  ...
Run Code Online (Sandbox Code Playgroud)

(以上当然不符合abc,但在每种情况下都会匹配)

F#中,可以使用活动模式:

let (|IsAbc|IsDef|) str = if str = abc then IsAbc(str)
                     else if str = def then IsDef(str)
                     ...
let res = match x with 
          | IsAbc x -> 1
          | IsDef x -> …
Run Code Online (Sandbox Code Playgroud)

ocaml ml pattern-matching

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

0
推荐指数
1
解决办法
1663
查看次数

F#在类型中是否具有AND或具有父编号的类型层次结构?

我想定义一个int和float的列表,其中[1,2.0]应该是一个有效的构造.

例如,F#在类型或类型层次结构中是否具有int和从数字派生的浮点数?

谢谢.

f# types ml

0
推荐指数
1
解决办法
253
查看次数

优化OCaml中的文件写入操作?

基本上在我的项目中,我试图将字符串列表写入文件,如下所示:

val mutable rodata_list : (string*string) list = []
.....
let zip1 ll =
   List.map (fun (h,e) -> h^e) ll in
let oc = open_out_gen [Open_append; Open_creat] 0o666 "final_data.s" in
  List.iter (fun l -> Printf.fprintf oc "%s\n" l) (zip1 rodata_list);  
Run Code Online (Sandbox Code Playgroud)

这是我的问题,通常rodata_list可以达到800,000大小,我们的服务器(64-bit, 32 core Intel(R) Xeon(R) CPU E5-2690 0 @ 2.90GHz)上面的代码大约需要3.5秒.. OCaml我使用的版本是4.01.0.

这是不可接受的,特别是因为我有4个像这样的代码写入文件.完全他们可以带我超过15秒..

我试过这个:

Printf.fprintf oc "%s\n" (String.concat "\n" (zip1 rodata_list));
Run Code Online (Sandbox Code Playgroud)

但没有明显的改善..

所以我想知道,如何优化这部分?我感谢任何解决方案.谢谢!

optimization ocaml file ml

0
推荐指数
1
解决办法
84
查看次数

OCaml选项返回值和选项匹配

我想编写一个接受自定义类的值的函数myType,然后返回myType option.不确定我的问题是签名,内容还是返回值.

例如,我试图编写以下内容(它已经简化,没有任何实际意义):

let rec myFunc (t:myType) myType option =
  let t2 = myFunc t in
    match t2 with
    | None -> None
    | _ -> t
Run Code Online (Sandbox Code Playgroud)

我收到以下编译错误:

错误:此模式匹配'a选项类型的值,但预期模式匹配类型'b - >'c - >'d的值

不确定我的语法有什么问题,或者我误解了OCaml.

ocaml ml match optional

0
推荐指数
1
解决办法
413
查看次数