2014-10-05 47 views
1

我在CLEAN中遇到问题,如何在字符串中使小写字母变成小写字母?我可以通过char数组来完成,但我也需要使用字符串来完成。 我有下面至今代码:如何在CLEAN中小写字符串

module Something 

import StdEnv, StdLib 

arrayLower:: [Char] -> [Char] 
arrayLower[x:xs] = (map toLower [x:xs]) 


stringLower:: String -> String 
stringLower_ = "" 
stringLowers = toString (arrayLower s) 

Start:: String  
Start = stringLower"SSSsss" 
+2

'String'是'[字符]'只是语法糖。 – Jubobs 2014-10-05 14:52:18

+0

我知道,但仍然没有帮助,如果它们在语义上也是等价的,那么代码会产生“ssssss” – Thomas 2014-10-05 15:15:06

+3

这个问题标记为正确吗?目前它被标记为'haskell'和'functional-programming'。我不知道Clean,但是在haskell中它会是'arrayLower xs = map toLower xs',并且不需要'stringLower'。 – 2014-10-05 15:31:28

回答

4

你的第一个案例

stringLower _ = "" 

意味着stringLower应用到什么是空字符串。
我很惊讶你没有得到多余的第二种情况的警告。

一个String数组(拆箱,所以这是一个{#Char}),和你说,你已经知道如何使用数组做到这一点,但你arrayLower是为Char[Char])列表,而不是数组定义。

此,使用数组的理解,对我的作品:

stringLower :: String -> String 
stringLower s = {toLower c \\ c <-: s} 
+0

它仍然不是工作:类型错误[Interleave.icl,6,stringLower]:近地图:不能统一类型: 字符串 [v0] – Thomas 2014-10-05 17:19:07

+0

@GaborToth这个怎么样? (编辑。) – molbdnilo 2014-10-05 20:07:42

+0

我看到了,但输出仍然是“”:(,编译器说:警告[Interleave.icl,9,stringLower]:替代将永远不会匹配 – Thomas 2014-10-06 05:44:14

相关问题