開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- Haskell (プログラミング言語)
- Haskell Platform(ghci)(処理系)
関数プログラミング入門(Richard Bird (著)、山下伸夫 (翻訳)、オーム社)の第1章(基本概念)、1.1(セッションとスクリプト)、練習問題1.1.1、1.1.2、1.1.3を取り組んでみる。
練習問題1.1.1、1.1.2、1.1.3
コード(Emacs)
-- 1.1.1 square :: Float -> Float square x = x * x quad :: Float -> Float quad x = square ( square x ) -- 1.1.2 greater :: Float -> Float -> Float greater x y = if x >= y then x else y -- 1.1.3 area :: Float -> Float area r = r * r * 22/7
入出力結果(Terminal, ghci)
$ ghci sample1.hs GHCi, version 8.0.2: http://www.haskell.org/ghc/ :? for help [1 of 1] Compiling Main ( sample1.hs, interpreted ) Ok, modules loaded: Main. *Main> quad 0 0.0 *Main> quad 1 1.0 *Main> quad 10 10000.0 *Main> quad -1 <interactive>:4:1: error: • No instance for (Num (Float -> Float)) arising from a use of ‘-’ (maybe you haven't applied a function to enough arguments?) • In the expression: quad - 1 In an equation for ‘it’: it = quad - 1 *Main> quad (-1) 1.0 *Main> quad -10 <interactive>:6:1: error: • No instance for (Num (Float -> Float)) arising from a use of ‘-’ (maybe you haven't applied a function to enough arguments?) • In the expression: quad - 10 In an equation for ‘it’: it = quad - 10 *Main> quad (-10) 10000.0 *Main> greater 0 1 1.0 *Main> greater 1 0 1.0 *Main> greater 1 1 1.0 *Main> greater -1 0 <interactive>:11:1: error: • No instance for (Num (Float -> Float -> Float)) arising from a use of ‘-’ (maybe you haven't applied a function to enough arguments?) • In the expression: greater - 1 0 In an equation for ‘it’: it = greater - 1 0 <interactive>:11:10: error: • No instance for (Num (t0 -> Float -> Float -> Float)) arising from the literal ‘1’ (maybe you haven't applied a function to enough arguments?) • In the expression: 1 In the second argument of ‘(-)’, namely ‘1 0’ In the expression: greater - 1 0 <interactive>:11:12: error: • Ambiguous type variable ‘t0’ arising from the literal ‘0’ prevents the constraint ‘(Num t0)’ from being solved. Probable fix: use a type annotation to specify what ‘t0’ should be. These potential instances exist: instance Num Integer -- Defined in ‘GHC.Num’ instance Num Double -- Defined in ‘GHC.Float’ instance Num Float -- Defined in ‘GHC.Float’ ...plus two others ...plus one instance involving out-of-scope types (use -fprint-potential-instances to see them all) • In the first argument of ‘1’, namely ‘0’ In the second argument of ‘(-)’, namely ‘1 0’ In the expression: greater - 1 0 *Main> greater (-1) 0 0.0 *Main> greater -1.0 0 <interactive>:13:1: error: • No instance for (Num (Float -> Float -> Float)) arising from a use of ‘-’ (maybe you haven't applied a function to enough arguments?) • In the expression: greater - 1.0 0 In an equation for ‘it’: it = greater - 1.0 0 <interactive>:13:10: error: • No instance for (Fractional (t0 -> Float -> Float -> Float)) arising from the literal ‘1.0’ (maybe you haven't applied a function to enough arguments?) • In the expression: 1.0 In the second argument of ‘(-)’, namely ‘1.0 0’ In the expression: greater - 1.0 0 <interactive>:13:14: error: • Ambiguous type variable ‘t0’ arising from the literal ‘0’ prevents the constraint ‘(Num t0)’ from being solved. Probable fix: use a type annotation to specify what ‘t0’ should be. These potential instances exist: instance Num Integer -- Defined in ‘GHC.Num’ instance Num Double -- Defined in ‘GHC.Float’ instance Num Float -- Defined in ‘GHC.Float’ ...plus two others ...plus one instance involving out-of-scope types (use -fprint-potential-instances to see them all) • In the first argument of ‘1.0’, namely ‘0’ In the second argument of ‘(-)’, namely ‘1.0 0’ In the expression: greater - 1.0 0 *Main> greater (-1) (-1) -1.0 *Main> area 0 0.0 *Main> area 1 3.142857 *Main> area 10 314.2857 *Main> :q Leaving GHCi. $
0 コメント:
コメントを投稿