2016-07-01 1 views
0

文字列に小文字が含まれているかどうか知るために、String -> Boolean演習をしたい場合など、この再帰の仕組みを理解できない場合はどうすればよいですか?これは私の大きなアマチュアコードです私は良く知りませんが、でも、適切にリストを実行している:小文字のチェッカーを作成するにはどうすればよいですか?

lowercase (x:xs) | isLower x lowercase xs = True 
       | otherwise = False 
+0

あなたは[こちら](HTTP "基本機能の定義" の項を参照(ガードするための構文上に読んでください://www.seasを。 upenn.edu/~cis194/fall14/spring13/lectures/01-intro.html))。 '|'と '='の間の式はブール値に評価されるべきであり、左側の式が真であると評価されるなら '='の右側の式は関数の結果でなければなりません。ガードの式は、上から順にテストされ、「真」の条件が見つかるまで下に移動します。あなたはまだ混乱していますか? – eigenchris

答えて

0

方法について:

lowercase (x:xs) = if isLower x 
        then lowercase xs 
        else False 

しかし、あなたはまだ、空の文字列の場合カバーする必要があります。

lowercase [] = ??? 

ブール値がTrueかFalseかを明示的にテストする必要はありません。私。 if boolexpr == True ...の代わりにif boolexpr ...

+2

さらに、 'if x then y else False'は' x && y'と書くことができます。 – chi

2

あなたは良いアイデアがありますが、構文が間違っています。

lowercase :: String -> Bool 
lowercase [] = True -- this case is needed to ensure that recursion stops 
lowercase (x:xs) | isLower x = lowercase xs 
lowercase _ = False 

または、標準ライブラリを使用して、

lowercase = all isLower 
+0

それは本当に有用なおかげで多くだった。 – Alex96

関連する問題