Nim编程入门
Nim 语言提供了 using
语句,使得我们可以简化相同参数的函数定义,但是需要注意不能用于 template
。
正常定义的函数如下: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
53import streams, strutils, sequtils, strformat
type
Graph* = object
data: seq[seq[int]]
vertex, edge: int
proc addEdge*(g: var Graph; v, w: int)
proc initGraph*(vertex: int): Graph =
result.vertex = vertex
result.data = newSeqWith(vertex, newSeq[int]())
proc initGraph*(file: File): Graph =
var strm = newFileStream(file)
let
vertex = parseInt(strm.readLine)
edge = parseInt(strm.readLine)
result = initGraph(vertex)
for i in 0 ..< edge:
let
line = strm.readLine.split
(v, w) = (line[0].parseInt, line[1].parseInt)
result.addEdge(v, w)
proc addEdge*(g: var Graph; v, w: int) =
g.data[v].add(w)
g.data[w].add(v)
g.edge += 1
iterator items*(g: Graph; vertex: int): int =
for item in g.data[vertex]:
yield item
proc vertex*(g: Graph): int =
g.vertex
proc edge*(g: Graph): int =
g.edge
proc `$`*(g: Graph): string =
result.add &"{g.vertex} vertices, {g.edge} edges\n"
for v in 0 ..< g.vertex:
result.add &"{v}: "
for w in g.items(v):
result.add &"{w} "
result.add "\n"
var f = open("graph.txt", fmread)
var g = initGraph(f)
echo g
使用 using
语句,定义参数就可以省略类型了。
1 | import streams, strutils, sequtils, strformat |
输出
1 | 13 vertices, 13 edges |