我是Scheme的新手,我有一些问题。
首先,我想制作一个图形,然后将其用于某些东西(如Dijkstra等)。首先,我想创建一个返回Vertexes计数的函数(不确定这是否是一个单词)。但我得到了这个错误,我只是无法意识到它是什么以及为什么我得到它。
此外,当我得到顶点的数量时,我希望每对配对列表都会给出给定顶点的信息,但我不知道该怎么做。
(例如,如果列表应该有4个顶点((0,-1)(0 -1)(0 -1)(0 -1))“ - 1”将像无穷大一样,因为没有0以下的“权重”
我确信有1182498个更好的方法来做算法,但我想试试我的想法。但我仍然没有足够的经验。
以下是我的错误代码:
(define G '((A (B 6) (E 5))
(B (D 3))
(C (A 1) (D 1))
(D (C 7) (E 5) (W 3))
(E (D 4) (F 10))
(F)
))
(define (getNumV G)
(if (null? (car G)) 0)
(+ 1 (getNumV (cdr G))))
答案 0 :(得分:0)
如果列表为空,则无法使用car
,因此测试只是(null? G)
,而不是(null? (car G))
。
另外,在0
之后你有一个右括号是错误的,都是关于逻辑的,因为在Scheme中if
需要有一个 else 部分(您可以使用when
或unless
来避免这种情况。)
所以代码应该是
(define (getNumV G)
(if (null? G)
0
(+ 1 (getNumV (cdr G)))))
这样
(display (getNumV G))
=> 6
另外,请尝试正确缩进代码,并且不要悬空结束括号。
为您的程序的list参数使用通用名称会更加清晰,例如lst
,而不是真实列表G
的名称:
(define (getNumV lst)
(if (null? lst)
0
(+ 1 (getNumV (cdr lst)))))
(display (getNumV G))
=> 6
请注意,您可以使用内置程序length
代替getNumV
:
(display (length G))
=> 6