私は、数字が回文かどうかを判断する関数を書いています。文字列を最初、最後、最後にどのように破棄するのですか?
私が最初にしたいのは、文字列を最初の文字、中間のすべての文字、最後の文字に分解することです。私がするのは、最初の文字が最後の文字と等しいかどうかを確認し、そうであれば中間の文字をチェックすることです。
私が持っているものは以下ですが、コンパイル時にタイプエラーが発生します。あなたは型エラー理由を取得している[1,2]
に 1:2:[]
結果:
numberIsPalindrome :: Int -> Bool
numberIsPalindrome n =
case nString of
(x:xs:y) -> (x == y) && numberIsPalindrome xs
(x:y) -> x == y
x -> True
where nString = show n
リストは、リスト(ない配列)をリンクされている...
をしかし、これは本当のライブで、このようなコードを使用していない、デモンストレーションの目的のためだけです、最後にアクセスするのは高価な操作であり、パターンマッチングでは実行できません。そのために 'last'ライブラリ関数を使用できますが、遅くなります。リストを逆にして、以下に示すように等価性をチェックする方がはるかに効率的で簡単です。 – chi