2
. Haskell
1. :
Haskell. Haskell. .
2. :
1. .
2. Haskell .
3. , , Haskell.
4. .
3. :
3.1. Haskell?
Haskell , . Haskell , , , , , , , - , , , . Haskell , .
Hasckell . , . , Haskell-98. Miranda, Ҹ . .
1990 . Haskell , . , (.Net, COM/ActiveXHaskellScript, Javajaskell), .
Haskell , . . . , , :type (:t). , :set +t, , .
Haskell :
Integer Int , Integer .
Float Double .
Bool : True False, .
Char . Haskell .
|
|
Haskell . , . .
, - , , : :: . +t, .
. , , Prelude>, , .
:
Prelude>:set +t
Prelude>1
Integer
Prelude>1.2
Double
Prelude>a
a:: Char
Prelude>True
True:: Bool
, Integer, Double Char , .
Haskell . , Haskell . , Haskell (Accessviolation). , . , , .
Hugs . +, -,*, / (, , ) . , ^ ( ). , :
:
Prelude>2*2
Integer
Prelude>4*5 + 1
Integer
Prelude >2^3
Integer
, sqrt (), sin, cos, exp .. , Haskell . , sqrt 2, sqrt(2). :
:
Prelude>sqrt 2
Double
Prelude>1 + sqrt 2
Double
Prelude>sqrt 2 + 1
Double
Prelude>sqrt (2 + 1)
Double
, , , sqrt 2 + 1 (sqrt 2) + 1, sqrt (2 + 1). , . ( , .) , , Haskell ( 2^5000.) , int ( 2 1 2147483647 31 − =), Integer Haskell .
|
|
, Haskell . , , . Haskell , : (5,3). : , , - ..
, a b Haskell, , a, - b, (a,b). , (5,3) (Integer, Integer); (1, 'a') (Integer, Char). : ((1,'a'),1.2) ((Integer,Char),Double). .
, (1,2) (Integer,Integer) , Haskell . , - .
Haskell fst snd, , , ( firs() second ()). , :
:
Prelude > fst (5, True)
Integer
Prelude > snd (5, True)
True:: Bool
, , .. .
:
Prelude>(1,2,3)
(1,2,3):: (Integer,Integer,Integer)
Prelude>(1,2,3,4)
(1,2,3,4):: (Integer,Integer,Integer,Integer)
. . fst snd . , , , .
, . , , fst snd. 'a' (1, ('a', 23.12)):
:
Prelude >
fst (snd (1, ('a', 23.12)))
'a':: Char
, . Haskell, . . , a, [a].
:
Prelude>[1,2]
[1,2]:: [Integer]
Prelude>['1','2','3']
['1','2','3']:: [Char]
. [].
: () . , - :
:
Prelude>1:[2,3]
[1,2,3]:: [Integer]
Prelude>'5':['1','2','3','4','5']
['5','1','2','3','4','5']:: [Char]
Prelude>False:[]
[False]:: [Bool]
(:) :
:
Prelude>1:(2:(3:[]))
[1,2,3]:: Integer
(:) , :
:
Prelude>1:2:3:[]
[1,2,3]:: Integer
- , , , ..
:
|
|
Prelude>[(1,'a'),(2,'b')]
[(1,'a'),(2,'b')]:: [(Integer,Char)]
Prelude>[[1,2],[3,4,5]]
[[1,2],[3,4,5]]:: [[Integer]]
Haskell . .
head .
last .
tail
init
null . , True, False.
length .
elem .
take , n .
zip , .
!! , ( 0).
head tail . . :
:
Prelude>head [1,2,3]
1:: IntegerPrelude>tail [1,2,3]
[2,3]:: [Integer]
Prelude>tail [1]
[]:: Integer
Prelude>length [1,2,3]
Int
Prelude>elem 2 [1,2,3]
True:: Bool
Prelude> take 2 [1,2,3]
[1,2]:: [Integer]
Prelude> zip ["20","30"] [1,2,3]
[("20",1),("30",2)]:: [([Char],Integer)]
Prelude> [1,2,3,4,5]!! 3
Integer
, length Int, Integer.
() Haskell ++.
:
Prelude>[1,2]++[3,4]
[1,2,3,4]:: Integer
Haskell, , . String.
:
Prelude>"hello"
"hello":: String
; , "hello", ['h','e','l','l','o'] 'h':'e':'l':'l':'o':[] , String [Char]. :
:
Prelude>head "hello"
'h':: Char
Prelude>tail "hello"
"ello":: [Char]
Prelude>length "hello"
Int
Prelude >" hello " ++ ", world "
"hello, world":: [Char]
read show:
:
Prelude>show 1
"1":: [Char]
Prelude>"Formula " ++ show 1
"Formula 1":: [Char]
Prelude>1 + read "12"
Integer
show , .
Haskell. . (, ):
:load Haskell, .
:edit .
:reload .
, Hugs :load. :edit. ( Notepad) . ; Hugs . Windows. , , :reload.
|
|
. - lab1.hs.
:\labs\lab1.hs ( , -). Hugs :
Prelude>:load "c:\\labs\\lab1.hs"
, Main>. , , , Main.
Main>:edit
, . :
x = [1,2,3]
. Hugs :\labs\lab1.hs x :
Main>x
[1,2,3]:: [Integer]
, :load \ . , , Haskell \ ('\n' ..) , \, , , \. . , , , - :
:
square:: Integer -> Integer
square x = x * x
(square:: Integer ->Integer) , square, Integer Integer.
(square x = x * x) . square .
Haskell . , , , , , .. , .. Haskell, . , a b, a->b.
:
:
Main>:typesquare
square:: Integer ->Integer
Main > square 2
Integer
, square : . , -, , Integer ->Integer, -, Haskell, .
. , _ ' ( ). , :
Var
Var 1
VariableName
Variable _ name
var '
Haskell .
signum, :
:
signum:: Integer -> Integer
signum x = if x > 0 then 1
else if x < 0 then -1
Else 0
: if then else . then- else- .
Bool. . : <, >, <=, >=.
== .
/= .
Bool && || ( ), not. :
|
|
:
x >= 0 && x <= 10
x > 3 && x /= 10
(x > 10 || x < -10) &¬ (x == y)
, , Bool, . , isPositive, True, False :
isPositive:: Integer ->Bool
isPositive x = if x > 0 then True else False
signum :
signum:: Integer -> Integer
signum x = if isPositive x then 1
else if x < 0 then -1 else 0
, isPositive :
isPositive x = x > 0
, . , Haskell , . add, , :
:
add:: Integer ->Integer ->Integer
add x y = x + y
add . Haskell , -> . , add Integer -> (Integer ->Integer), .. , add , Integer. , , n , t1, t2,, tn, a, t1->t2->...->tn->a.
, . , signum isPositive, . : ? , isPositive signum; Haskell ! , isPositive , signum.
:
, :
1.
2. . .
3. 2 . , /.
4. 2 . .
5. 2 . .
6. . .
7. . .
8. .
9. .
10. . , 10.
:
1. Haskell?
2. Haskell.
3. .
4. .
5. Haskell.
6. Haskell.
:
1
. Haskell
: .
division.hs
division:: Int -> [Int]
division x=filter (divisible x) [1.. x]
divisible x y= x `mod` y ==0 --
1