标签: ml

在ML中的高阶函数中有什么咖喱和不干扰

fun curry f x y = f (x, y); 
fun uncurry f (x, y) = f x y; 
fun compose (f, g) x = f (g x);
Run Code Online (Sandbox Code Playgroud)

我理解compose功能,但不太了解ML中的curry和uncurry.谁能解释一下这些?

另外,以下两行是什么意思?

(1) compose (compose, uncurry compose)
(2) compose (uncurry compose, compose)
Run Code Online (Sandbox Code Playgroud)

ml sml currying higher-order-functions

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

ML家族编译器是否对尾调用进行任何复杂的优化?

我(相信)以下函数定义是尾递归的:

fun is_sorted [] = true
  | is_sorted [x] = true
  | is_sorted (x::(y::xs)) =
    if x > y
       then false
       else is_sorted (y::xs)
Run Code Online (Sandbox Code Playgroud)

琐碎的是,它等同于以下声明

fun is_sorted [] = true
  | is_sorted [x] = true
  | is_sorted (x::(y::xs)) = 
    (x <= y) andalso (is_sorted (y::xs))
Run Code Online (Sandbox Code Playgroud)

然而在这个版本中,最后一步是应用'andalso',所以它不是尾递归的.或者它似乎是这样,除了因为(至少是标准的)ML(NJ)使用短路评估,并且实际上/不是/最后一步.那么这个函数会有尾调用优化吗?还是有任何其他有趣的实例,其中明显使用尾递归的ML函数实际上得到优化?

ocaml tail-recursion ml sml

6
推荐指数
2
解决办法
362
查看次数

使用count和tfidf作为scikit学习的功能

我试图将两个计数和tfidf用作多项NB模型的特征.这是我的代码:

text = ["this is spam", "this isn't spam"]
labels = [0,1]
count_vectorizer = CountVectorizer(stop_words="english", min_df=3)

tf_transformer = TfidfTransformer(use_idf=True)
combined_features = FeatureUnion([("counts", self.count_vectorizer), ("tfidf", tf_transformer)]).fit(self.text)

classifier = MultinomialNB()
classifier.fit(combined_features, labels)
Run Code Online (Sandbox Code Playgroud)

但是我在使用FeatureUnion和tfidf时遇到错误:

TypeError: no supported conversion for types: (dtype('S18413'),)
Run Code Online (Sandbox Code Playgroud)

知道为什么会发生这种情况吗?是不是可以将两个计数和tfidf作为功能?

python nlp numpy ml scikit-learn

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

是否存在多次应用转换的标准高阶函数?

我在考虑这样的函数:

> let applyN (initial : 't) (n:int) (f : 't -> 't) = seq {1..n} |> Seq.fold (fun s _ -> f s) initial;;

val applyN : initial:'t -> n:int -> f:('t -> 't) -> 't

> applyN 0 10 (fun x -> x + 1);;
val it : int = 10
Run Code Online (Sandbox Code Playgroud)

注意:代码是F#,但我用haskell,ocaml和ml标签标记了问题,因为如果函数在F#库中不存在但是它存在于其他语言中我想使用相同的名称

f# ocaml haskell functional-programming ml

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

管道(|)在ML编程中意味着什么?

例如以下功能:

fun fac (0 : int) : int = 1
  | fac (n : int) : int = n * fac (n - 1)
Run Code Online (Sandbox Code Playgroud)

或者在功能中:

fun even 0 = true
  | even x = odd(x-1)
and odd 0 = false
  | odd x = even(x-1);
Run Code Online (Sandbox Code Playgroud)

我对ML的经验很少,我只是想了解基础知识.

ml sml pattern-matching

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

SML中的功能应用评估顺序是否具有确定性?

在OCaml中,功能应用的评估顺序未指定(也称为非确定性).

在标准ML中,它是否也是非确定性的或确定性的?您能否提供澄清的规格部分的参考?


编辑:对于你后来的人,我也学到了像SML一样,在F#中指定顺序和确定性 - 与OCaml不同,考虑到两者在语法上的接近程度,这更加疯狂.如果你在他们之间切换很容易忘记.

ml sml

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

为什么ML/Haskell数据类型对于定义像算术表达式这样的"语言"很有用?

对于像ML系列那样的函数式语言,这是一个关于静态类型系统的软问题.我理解为什么你需要数据类型来描述像列表和树这样的数据结构,但是像数据类型中的命题逻辑那样定义"表达式"似乎带来了一些便利并且不是必需的.例如

datatype arithmetic_exp = Constant of int
                        | Neg of arithmetic_exp
                        | Add of (arithmetic_exp * arithmetic_exp)
                        | Mult of (arithmetic_exp * arithmetic_exp)
Run Code Online (Sandbox Code Playgroud)

定义一组值,您可以在其上编写一个eval可以为您提供结果的函数.你也可以同样定义了4个功能:const: int -> int,neg: int -> int,add: int * int -> intmult: int * int -> int,然后排序的表达add (mult (const 3, neg 2), neg 4)会给你同样的事情,不带静电安全的任何损失.唯一的复杂因素是你必须做四件事而不是两件事.在学习SML和Haskell时,我一直在考虑哪些功能为您提供了必要的东西,哪些只是一种便利,所以这就是我要问的原因.我想如果你想要从值本身分离一个值的过程,这就很重要,但我不确定哪个有用.

非常感谢.

haskell types ml

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

向C++程序员解释ML类型推断

ML如何在以下函数定义中执行类型推断:

let add a b = a + b
Run Code Online (Sandbox Code Playgroud)

它是否像C++模板一样,在模板实例化之前不执行类型检查,如果类型支持必要的操作,函数可以工作,否则会抛出编译错误?

即,例如,以下功能模板

template <typename NumType>
NumType add(NumType a, NumType b) {
  return a + b;
}
Run Code Online (Sandbox Code Playgroud)

会为...工作

add<int>(23, 11);
Run Code Online (Sandbox Code Playgroud)

但不会起作用

add<ostream>(cout, fout);
Run Code Online (Sandbox Code Playgroud)

我猜的是正确的还是ML类型的推理工作方式不同?

PS:抱歉我的英语不好; 这不是我的母语.

c++ templates functional-programming type-inference ml

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

标准ML健全性证明?

关于标准ML编译器,我的问题是,尽管ML本身已经正式定义,可以证明程序的确定性评估,但是编译器本身是用C语言编写的,这是不是正式定义的,至少不是全部的?我想我的问题是我们用标准ML编写一个程序并且可以证明它的正确性,我们怎么知道C编写的编译器没有以可能改变结果的方式执行?

谢谢

c compiler-construction ml sml

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

是否可以在标准机器学习中创建“通用”函数?

我想创建一个函数remove_duplicates,它接受list任何类型的 a (例如可以是 anint list或 abool list或 aint list list或 a whatever list)并返回没有重复的相同列表,这在标准机器学习中可能吗?

functional-programming ml sml smlnj mosml

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