私はLYAHを経てきましたが、ハスケルの紹介はあまり良くありません。リチャード・バードの「Haskellを使った関数型プログラミング入門」を勧めた「Haskellへの優しい導入」に出くわしました。それは私が今読んでいる本です。第3章ではNat型のデータ型を作成し、基本的な算術演算を実装しています。ナチュラルナンバー算術をゼロから実装する際のトラブル
これは私が今まで書かれているコードです:
module Main where
import Prelude hiding ((^^))
data Nat = Zero | Succ Nat
deriving (Eq, Ord, Show)
xx :: Nat -> Nat -> Nat
m `xx` Zero = Zero
m `xx` Succ n = (m `xx` n) `add` m
(^^) :: Nat -> Nat -> Nat
m ^^ Zero = Succ Zero
m ^^ Succ n = (m ^^ n) `xx` m
add :: Nat -> Nat -> Nat
m `add` Zero = m
m `add` Succ n = Succ(m `add` n)
factsu :: Nat -> Nat
factsu Zero = Succ Zero
factsu (Succ n) = Succ n `xx` factsu n
--Zero = 0
showNat :: Nat -> String
showNat Zero = "Zero"
showNat (Succ Zero) = "Succ Zero"
showNat (Succ (Succ n)) = "Succ (" ++ showNat (Succ n) ++ ")"
main :: IO()
main = return()
これは何が起こるかです:
factsu Zero
Succ Zero
it :: Nat
私は成功回数とゼロを定義するにはどうすればよいですか?
* SuccとZeroを*定義するとどういう意味ですか?あなたはあなたのファイルにそれらを定義しました... –
@WillemVanOnsem私は彼らが文字列として解釈されていると思います。 – learninghaskell
いいえ、それらを次のように定義しました: 'data Nat = Zero |サックナット。 'Nat'は' Show'から派生しているので、例えば 'show(Succ Nat)'を文字列に変換します。あなたは '' Succ Zero''を '' Succ Zero''に構文解析できるように 'Read'から派生させることもできます。 –