Functional programming 标准ML:基本转换为大写字符
我试图编写一个函数,将小写字符转换为大写字符(如果是大写,则保持不变) 以下是我写的:Functional programming 标准ML:基本转换为大写字符,functional-programming,sml,Functional Programming,Sml,我试图编写一个函数,将小写字符转换为大写字符(如果是大写,则保持不变) 以下是我写的: fun toUpper(myChar) = exception invalidCharacter; if ord(myChar) >= ord(#"A") andalso ord(myChar) <= ord(#"Z") then myChar else if ord(myChar) >= ord(#"a") andalso ord(myChar) &
fun toUpper(myChar) =
exception invalidCharacter;
if ord(myChar) >= ord(#"A") andalso ord(myChar) <= ord(#"Z") then myChar
else
if ord(myChar) >= ord(#"a") andalso ord(myChar) <= ord("z") then
chr(ord(myChar) - (ord(#"a") - ord(#"A")));
else raise invalidCharacter;
我不允许像以前那样在函数中定义异常吗
谢谢你的帮助,
b外行否,您需要在let表达式中定义异常,例如:
fun toUpper(myChar) =
let exception invalidCharacter;
in if ord(myChar) >= ord(#"A") andalso ord(myChar) <= ord(#"Z") then myChar
else
if ord(myChar) >= ord(#"a") andalso ord(myChar) <= ord(#"z") then
chr(ord(myChar) - (ord(#"a") - ord(#"A")))
else raise invalidCharacter
end
无法从invalidCharacter
异常中恢复,除非您处理所有异常(这通常是不好的做法):
相反,我们希望:
fun toUppers(str) =
String.implode (map toUpper (String.explode str)) handle invalidCharacter => (*do something*)
fun toUppers(str) = String.implode (map toUpper (String.explode str))
fun toUppers(str) =
String.implode (map toUpper (String.explode str)) handle e => (*do something*)
fun toUppers(str) =
String.implode (map toUpper (String.explode str)) handle invalidCharacter => (*do something*)