要比较两个字符串并将字符串添加到列表中,如果它们相等,我使用内置的比较函数创建了这个函数:
fun compareString(string, list) =
if compare(string, "hello") = EQUAL then string::list;
Run Code Online (Sandbox Code Playgroud)
但是,这会产生错误.我想我的语法一定是错的,我是否正确使用了比较功能?
根据文档,比较函数的工作原理如下:
compare(s,t)使用
Char.compare字符的顺序对两个字符串进行字典比较.如果s小于,等于或大于t,则返回LESS,,EQUAL或GREATER.
你所忘记的是别人...的一部分IF-THEN-ELSE.这部分是强制性的.
您可能希望String.compare专门使用该功能.
但是,如果你只关心相同的情况,你可以简单地使用=运算符.
名称compareString是一个将字符串汇总到列表的函数的奇怪名称.
名称字符串和列表也不是很好的变量名,因为它们没有描述变量的用途.如果函数是通用的,那么通用名称可能是合适的,您可以选择任何您喜欢的通用名称方案.
包含谓词(一个字符串必须等于"hello")似乎有点傻,因为你会确切知道该列表的样子; 它将与正整数同构.相反,如果将包含谓词作为参数,则该函数可能实际上很有用.
例如:
fun consIf (p, x, xs) =
if p x
then x :: xs
else xs
fun is_greeting x = List.exists (fn y => x = y) ["hello", "hi", "good day"]
val ys = consIf (is_greeting, "hello", ["hi"])
Run Code Online (Sandbox Code Playgroud)
或者将它变成一个二元运算符并命名它,::?因为它类似于::一个条件:
infixr 5 ::?
fun x ::? xs = fn p => if p x then x::xs else xs
val ys = ("boaty mcboatface!" ::? ["hi"]) is_greeting
Run Code Online (Sandbox Code Playgroud)