文字列に小文字が含まれているかどうか知るために、String -> Boolean
演習をしたい場合など、この再帰の仕組みを理解できない場合はどうすればよいですか?これは私の大きなアマチュアコードです私は良く知りませんが、でも、適切にリストを実行している:小文字のチェッカーを作成するにはどうすればよいですか?
lowercase (x:xs) | isLower x lowercase xs = True
| otherwise = False
文字列に小文字が含まれているかどうか知るために、String -> Boolean
演習をしたい場合など、この再帰の仕組みを理解できない場合はどうすればよいですか?これは私の大きなアマチュアコードです私は良く知りませんが、でも、適切にリストを実行している:小文字のチェッカーを作成するにはどうすればよいですか?
lowercase (x:xs) | isLower x lowercase xs = True
| otherwise = False
方法について:
lowercase (x:xs) = if isLower x
then lowercase xs
else False
しかし、あなたはまだ、空の文字列の場合カバーする必要があります。
lowercase [] = ???
を
ブール値がTrueかFalseかを明示的にテストする必要はありません。私。 if boolexpr == True ...
の代わりにif boolexpr ...
さらに、 'if x then y else False'は' x && y'と書くことができます。 – chi
あなたは良いアイデアがありますが、構文が間違っています。
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
それは本当に有用なおかげで多くだった。 – Alex96
あなたは[こちら](HTTP "基本機能の定義" の項を参照(ガードするための構文上に読んでください://www.seasを。 upenn.edu/~cis194/fall14/spring13/lectures/01-intro.html))。 '|'と '='の間の式はブール値に評価されるべきであり、左側の式が真であると評価されるなら '='の右側の式は関数の結果でなければなりません。ガードの式は、上から順にテストされ、「真」の条件が見つかるまで下に移動します。あなたはまだ混乱していますか? – eigenchris