Sml 使用';比较';功能

Sml 使用';比较';功能,sml,Sml,为了比较两个字符串,并将相等的字符串添加到列表中,我使用内置的比较函数创建了此函数: fun compareString(string, list) = if compare(string, "hello") = EQUAL then string::list; 然而,这给出了一个错误。我猜我的语法一定是错的,我是否正确使用了比较函数 根据文档,比较功能的工作原理如下: compare(s,t)使用排序Char对两个字符串进行词典比较。对字符进行比较。如果s分别小于、等于或大于t,则

为了比较两个字符串,并将相等的字符串添加到列表中,我使用内置的比较函数创建了此函数:

fun compareString(string, list) = 
    if compare(string, "hello") = EQUAL then string::list;
然而,这给出了一个错误。我猜我的语法一定是错的,我是否正确使用了比较函数

根据文档,比较功能的工作原理如下:

compare(s,t)使用排序
Char对两个字符串进行词典比较。对字符进行比较。如果s分别小于、等于或大于t,则返回
LESS
EQUAL
GREATER

  • 你忘记的是其他的。。。如果是,那么是。这部分是强制性的

  • 您可能想使用函数
    String。请具体比较

  • 但是,如果您只关心相同的情况,则可以简单地使用
    =
    运算符

  • 名称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"])
或者将其转换为二进制运算符,并将其命名为
:?
,因为它类似于带有以下条件的

infixr 5 ::?
fun x ::? xs = fn p => if p x then x::xs else xs

val ys = ("boaty mcboatface!" ::? ["hi"]) is_greeting