2016-10-12 126 views
1

比較兩個字符串和字符串添加到列表中,如果他們平等的,我使用內置的比較功能創造了這個功能比較字符串給出錯誤。我猜我的語法一定是錯的,我是否正確使用了比較函數?使用「比較」功能

根據該文件,比較功能的工作原理如下:

比較(S,T)不使用的字符排序Char.compare兩個字符串的字典比較。如果s分別小於,等於或大於t,則它返回LESS,EQUALGREATER

回答

5
  • 你所忘記的是否則...的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"]) 

或者使這種成二進制運算符和,因爲它類似於::符合條件命名爲::?

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

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