标签: ml

通过翻译ML的等价物来实现F#

我想将这个ML代码翻译成F#.

fun take ([], i) = []
  | take (x::xs, i) = if i > 0 then x::take(xs, i-1) 
                                else [];
Run Code Online (Sandbox Code Playgroud)

我试过这个

let rec take n i =
  match n,i with 
    | [], i -> []
    | x::xs, i -> if i > 0 then x::take(xs, i-1)
                           else [];

let val = take [1;2;3;4] 3
Run Code Online (Sandbox Code Playgroud)

还有这个

let rec take input =
  match input with 
    | ([], i) -> []
    | (x::xs, i) -> if i > 0 then x::take(xs, i-1) …
Run Code Online (Sandbox Code Playgroud)

f# ml sml take

3
推荐指数
2
解决办法
235
查看次数

函数式语言是否使用来自调用者的信息进行类型推断?

考虑函数f1和f2,例如Haskell或ML.假设f2调用f1.类型推断是否仅使用f1可以调用的信息,这相当于只查看f1的定义.或者它也看看f1在f1上进行类型推断时如何调用f1.例如,f2可能在调用f1时传入文字,这会限制f1的参数类型.

types functional-programming type-inference ml

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

如何在SML中实例化一个仿函数?

如果我有以下仿函数,我怎样才能用ListMapFn?实例化它?

functor G(M: ORD_MAP where type Key.ord_key = string) :
Run Code Online (Sandbox Code Playgroud)

functional-programming ml sml

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

标准ML - 在let-in-end表达式中更新全局变量?

有没有办法在let-in-end表达式中更新全局范围内绑定的变量?

例如,如果我有一个全局变量:

val playerScore = 0; 
Run Code Online (Sandbox Code Playgroud)

然后功能:

fun hit (option:int) = 
    if option = 2 then
        printStay(playerScore, dealerScore)
    else 
        let
            val cardDrawn = showCard(hd deck)
            val playerScore = playerScore + getValue(hd deck)
        in 
            print ("You chose to hit\n" ^ cardDrawn ^ "Dealer Score: " ^ Int.toString(dealerScore) ^ "\nPlayer Score: " ^ Int.toString(playerScore) ^ "\n")  
        end; 
Run Code Online (Sandbox Code Playgroud)

playerScore的值在let表达式中更新,并在"in"子句中输出正确的值,但不保存playerScore的实际值,并在此表达式完成后重置.

无论如何,在执行此表达式后,是否仍保留playerScore在全局级别的值?问题是我无法跟踪分数,因为它每次都会重置为0.

谢谢

standards scope global ml sml

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

在ML中使用ref函数

考虑到ref运算符,我无法理解它的应用程序以及遵循指令的意义:

1.

在这个定义中,我定义了什么?

 - val ref x=ref 9;

 val x = 9 : int
Run Code Online (Sandbox Code Playgroud)

2.

在这里我用ref x:= ref 12做什么?

 - val x= ref 8;

 val x = ref 8 : int ref

 - ref x := ref 12; 

 val it = () : unit

 - x;

 val it = ref 8 : int ref
Run Code Online (Sandbox Code Playgroud)

ml sml

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

SML中'a和''a有什么区别?

例如:

fun example (a:'a list) : list = a
Run Code Online (Sandbox Code Playgroud)

将签名:

'a list -> 'a list 
Run Code Online (Sandbox Code Playgroud)

如果我以不同的方式定义但具有相同的内容,该怎么办

fun example (a : ''a list) : list = a
Run Code Online (Sandbox Code Playgroud)

它的签名将是:

''a list -> ''a list
Run Code Online (Sandbox Code Playgroud)

有什么不同?

polymorphism ml sml

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

输入Haskell和ML之间的系统差异

我想知道Haskell和ML的Type系统之间的完全不同.我不需要一般的差异,但只需要他们的类型系统的差异.

任何人都可以解释为什么在Haskell中引入这些差异?(为简单起见的任何优点)

提前致谢!

haskell ml type-conversion

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

为什么我的类型定义在声明为变体时被拒绝为循环,但是否则接受?

我正在搞乱使用OCaml实现Chris Okasaki的Purely Functional Data Structures中的一些数据结构,并且遇到了这种类型的定义:

 type tree = Node of int * int * tree list;;
Run Code Online (Sandbox Code Playgroud)

我不认为它需要标签,因为它不是联合类型,所以我尝试删除标签,但是我得到以下错误:

# type tree = int * int * tree list;;
Characters 5-33:
type tree = int * int * tree list;;
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error: The type abbreviation tree is cyclic
Run Code Online (Sandbox Code Playgroud)

为什么两个看似相同的类型定义会发生这种情况?

ocaml types functional-programming ml cyclic

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

数据类型Nt = int | ML中的字符串

当我只有datatype Nt = int | string,sml不抱怨.但是当我也有val n = 6 : Nt,ml不接受6作为Nt.为什么是这样?我知道,通常应该有数据之前建设者intstring,但在这里我具有定义,可以采取两种功能intstring.

ml sml

3
推荐指数
2
解决办法
967
查看次数

在Ocaml中使用"和"表示多个相互递归函数

所以我在OCaml中有三个功能

let my_A = my_C
let my_B = my_A
let my_C = my_B
Run Code Online (Sandbox Code Playgroud)

函数A调用函数C.函数B调用函数A.函数C调用函数B.

我尝试使用"和"使它们相互递归(因此它们可以相互调用),如:

let my_A = my_C
and
my_B = my_A
and
my_C = my_B
Run Code Online (Sandbox Code Playgroud)

但它说

"未绑定的值my_C in __"

它基本上是说:"嘿,你不能打电话my_Cmy_A",但我不明白为什么?我不允许将三个功能链接在一起吗?

recursion ocaml functional-programming ml

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