blob: f10df450e88bac988d266c5587f006528d6369e1 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
implementation module MatchStrings
import StdEnv
head :: String -> Char
head "" = abort "Empty String"
head s = s.[0]
tail :: String -> String
tail "" = abort "Empty String"
tail s = s % (1, size s - 1)
is_gelijk :: String String -> Bool
is_gelijk "" "" = True
is_gelijk a b = (size a == size b) && (head a == head b) && is_gelijk (tail a) (tail b)
is_deelstring :: String String -> Bool
is_deelstring _ "" = False
is_deelstring a b = is_begin a b || is_deelstring a (tail b)
is_begin :: String String -> Bool
is_begin "" _ = True
is_begin _ "" = False
is_begin a b = head a == head b && is_begin (tail a) (tail b)
is_deel :: String String -> Bool
is_deel "" _ = True
is_deel _ "" = False
is_deel a b = head a == head b && is_deel (tail a) (tail b) || is_deel a (tail b)
is_match :: String String -> Bool
is_match a b = is_begin_match a b || size b > 0 && is_begin_match a (tail b)
is_begin_match :: String String -> Bool
is_begin_match "" _ = True
is_begin_match a "" = head a == '*' && size a == 1
is_begin_match a b
| head a == '.' || head a == head b = is_begin_match (tail a) (tail b)
| head a == '*' = is_begin_match a (tail b) || is_begin_match (tail a) b
| otherwise = False
//Start= (head pink_floyd, tail pink_floyd)
//Start= is_gelijk "" " "
//Start= is_deelstring "there" pink_floyd
//Start= is_deelstring "there" marillion
//Start= is_deel "there" marillion
//Start= is_deel "she and her" pink_floyd
//Start= is_deel radiohead pink_floyd
//Start= is_match "*.here*.here*." pink_floyd
//Start= is_match ".here.here." pink_floyd
pink_floyd= "Is there anybody in there?"
marillion= "Just for the record"
radiohead= "There there"
|