16

私は Haskell の超初心者で、実際には 10 分前に始めたばかりです。関数内で変数を定義する方法を理解しようとしています。私が機能を持っているとしましょう

foo :: Int -> Int
foo a = 
    b = a * 2
    b
-- Yes, I know, it doesn't do anything interesting

で実行するとGHCi、構文エラーが発生します。関数内で変数を定義するにはどうすればよいですか?

4

2 に答える 2

31

これを行うには、次の 2 つの方法があります。

foo a = b where b = a * 2
foo a = let b = a * 2 in b

ほとんどの場合、どちらを選択するかは、技術的なものではなく審美的なものです。より正確にwhereは、定義にのみ添付let ... in ...できますが、式が許可されている場所ならどこでも使用できます。との両方でブロックwhereを導入し、両方の場合で複数の内部変数を便利にします。let

于 2012-07-17T22:17:52.810 に答える
2

技術的な正しさを無視すると、答えは「ある程度」です。

変数は、与えられた値に評価されるゼロ引数の関数と考える方が良いと思います。

module Main where
import System.IO

foo :: Integer -> Integer
foo a =
  b where
    b = a * 2

main = do
  putStrLn $ show $ foo 10
于 2012-07-17T21:55:56.433 に答える