1
2
3
4
5
6
7
8
9
10
11 package main
12
13 type Peano *Peano
14
15 func makePeano(n int) *Peano {
16 if n == 0 {
17 return nil
18 }
19 p := Peano(makePeano(n - 1))
20 return &p
21 }
22
23 var countArg Peano
24 var countResult int
25
26 func countPeano() {
27 if countArg == nil {
28 countResult = 0
29 return
30 }
31 countArg = *countArg
32 countPeano()
33 countResult++
34 }
35
36 var s = "(())"
37 var pT = 0
38
39 func p() {
40 if pT >= len(s) {
41 return
42 }
43 if s[pT] == '(' {
44 pT += 1
45 p()
46 if pT < len(s) && s[pT] == ')' {
47 pT += 1
48 } else {
49 return
50 }
51 p()
52 }
53 }
54
55 func main() {
56 countArg = makePeano(4096)
57 countPeano()
58 if countResult != 4096 {
59 println("countResult =", countResult)
60 panic("countResult != 4096")
61 }
62
63 p()
64 }
65
View as plain text