Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String SML包含使用字符串和字符列表_String_Function_Contains_Sml_String Comparison - Fatal编程技术网

String SML包含使用字符串和字符列表

String SML包含使用字符串和字符列表,string,function,contains,sml,string-comparison,String,Function,Contains,Sml,String Comparison,我试图使用REPL将字符串与SML中的字符列表进行比较,我有以下几点: val alphabet = "abcdefghijklmnopqrstuvwxyz"; val charalphabet = explode alphabet; val str = "the quick brown fox"; val res = Char.contains(str, charalphabet); 这会引发错误,因为我试图将字符串与字符列表进行比较,而contains仅将字符串与单个字符进行比较。有人知道

我试图使用REPL将字符串与SML中的字符列表进行比较,我有以下几点:

val alphabet = "abcdefghijklmnopqrstuvwxyz";
val charalphabet = explode alphabet;
val str = "the quick brown fox";
val res = Char.contains(str, charalphabet);
这会引发错误,因为我试图将字符串与字符列表进行比较,而contains仅将字符串与单个字符进行比较。有人知道如何解决这个问题吗?我可以分解字符串str并比较字符列表,但是我不确定它们是否是用于此的函数。因此,如果有人对我可以读懂的函数或内容有任何想法,请告诉我,目的是查看字符串是否包含每个已定义的字符列表


我是SML的新手,非常感谢您的帮助

Char.contains
的参数之间加括号和逗号的方式表明,您在理解像
Char.contains
这样的函数如何工作时遇到了一些困难。这类函数称为curried函数,如果将它们视为两个变量的函数,则有点误导

Char.contains是类型为
string->Char->bool
的函数。输入类型是字符串,输出类型是
char->bool
类型的函数。通常情况下,会立即计算此输出函数:

- Char.contains "cat" #"a";
val it = true : bool
这可能看起来像是在计算一个包含两个变量的函数,但实际上是在计算一个变量的两个函数:函数
Char.contains
“cat”
处求值,以返回一个类型为
Char->bool
的函数,后一个函数在
#“a”处求值
以获得最终结果

请注意,可以使用
Char.contains
返回未立即计算的函数。例如:

val isVowel = Char.contains "aeiou";
这里的
isVowel
是一个函数,可用于检查(小写)字符是否为元音

List.all
是类型为
('a->bool)->'a List->bool
的函数。要使用它检查给定类型(例如
char
)的列表是否满足属性,需要向其传递一个函数,该函数接受该类型的元素并返回布尔值(例如
char->bool
)类型的函数

但是--我们已经知道如何制造
char->bool
类型的函数:使用
char.contains
。对于任何字符串
s
char.contains s s
是一个可以传递到
列表的函数。所有
以及应用于字母表中字符列表的结果函数:

val alphabet = explode "abcdefghijklmnopqrstuvwxyz";
fun isPanagram s = List.all (Char.contains s) alphabet;
Char.contains s
被括在括号中的原因是函数求值是左关联的。如果没有括号,SML会将其解析为
(List.all Char.contains)s
,这毫无意义。

你的字母表中缺少
wxyz
有什么原因吗?在任何情况下:提示1:
List.all
都很有用。提示2:
Char.contains str
Char->bool
类型的函数。我编辑了这篇文章,缺少的“wxyz”是我的打字错误。我将研究你刚才提到的两件事。今天早些时候我使用的函数是:fun isPangram c=if Char.contains(c,charalphabet)那么true else false;是否在正确的轨道上,即使它不工作?是的,它在正确的轨道上,因为
Char.contains
是作业的自然工具,您知道当前代码的问题所在。但是请注意
Char.contains
是一个常用函数,所以在输入周围加上括号这是不对的,所以除了char vs.char list问题之外,还有另一个问题。我认为插入括号是不相关的,是为了美观,但我想我错了。那么,是否可以定义我自己的contains函数来检查字符串是否包含字母表和retu中的所有字符rns是否正确?是的,您可以定义所需内容,但有一行定义使用List.all和Char.contains。非常感谢您的深入响应/解释。通过您建议的一些更改,我的函数运行得非常好。再次感谢您坚持我的观点,并花时间将所有内容解释得如此好!