gpt4 book ai didi

sml - 使用 'compare' 函数比较字符串

转载 作者:行者123 更新时间:2023-12-02 15:16:32 25 4
gpt4 key购买 nike

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

fun compareString(string, list) = 
if compare(string, "hello") = EQUAL then string::list;

但是,这会报错。我想我的语法一定是错误的,我是否正确使用了比较功能?

根据文档,比较函数的工作原理如下:

compare (s, t) does a lexicographic comparison of the two strings using the ordering Char.compare on the characters. It returns LESS, EQUAL, or GREATER, if s is less than, equal to, or greater than t, respectively.

最佳答案

  • 您忘记的是 if-then-elseelse ... 部分。这部分是强制性的。

  • 您可能想专门使用函数 String.compare

  • 不过,如果您只关心相等的大小写,则可以简单地使用 = 运算符。

  • 名称 compareString 是一个将字符串转换为列表的函数的奇怪名称。

  • 名称​​stringlist 也不是很好的变量名,因为它们没有描述变量的用途。如果函数是通用的,那么通用名称可能是合适的,您可以选择您喜欢的任何通用名称方案。

  • 包含谓词(一个字符串必须等于 "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

关于sml - 使用 'compare' 函数比较字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39989204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com