【问题标题】:How to lowercase a string in CLEAN如何在 CLEAN 中小写字符串
【发布时间】:2014-10-05 14:34:59
【问题描述】:

我在 CLEAN 中遇到问题,如何使字符串中的所有字母都小写?我可以通过 char 数组来完成,但我也需要用字符串来完成。 到目前为止,我有以下代码:

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"

【问题讨论】:

  • String 只是[Char] 的语法糖。
  • 我知道,但仍然无济于事,如果它们在语义上也是等价的,那么代码将产生“ssssss”
  • 这个问题的标签正确吗?目前它被标记为haskellfunctional-programming。我不知道 Clean,但在 haskell 中应该是 arrayLower xs = map toLower xs 并且不需要 stringLower
  • 您是否收到错误或不正确的输出?如果是错误,错误是什么,如果输出不正确,输出是什么?
  • 几乎没有Clean的标签,但是Clean和Haskell很相似

标签: functional-programming clean-language


【解决方案1】:

你的第一个案例

stringLower _ = ""

表示stringLower应用于任何东西都是空字符串。
我很惊讶您没有收到关于多余的第二种情况的警告。

String 一个数组(未装箱,所以它是一个{#Char}),并且您说您已经知道如何使用数组执行此操作,但是您的 arrayLower 是为Char ([Char]) 的列表,而不是数组。

这使用数组推导,对我有用:

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

【讨论】:

  • 还是不行:类型错误 [Interleave.icl,6,stringLower]: near map : cannot unify types: String [v0]
  • @GaborToth 这个怎么样? (已编辑。)
  • 我明白了,但输出仍然是 "" :(,编译器说:警告 [Interleave.icl,9,stringLower]: Alternative will never match
  • @GaborToth 那么您没有删除 stringLower _ = "" 案例。
  • module Something import StdEnv, StdLib arrayLower :: [Char] -> [Char] arrayLower [x:xs] = map toLower [x:xs] stringLower :: String -> String stringLower s = toString (arrayLower s) Start:: String Start = stringLower "SSSsss"
猜你喜欢
  • 2011-10-11
  • 2011-02-09
  • 2021-06-11
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多