Graph &引用;mcar:违反合同;新方案需要一些答案:)
我不熟悉这个计划,我有一些问题 首先我想做一个图,然后用它来做一些东西(比如Dijkstra等等),首先我想做一个函数,返回顶点的计数(不确定这是不是一个单词)。但我得到了这个错误,我只是不知道这是什么,为什么我得到它 另外,当我得到顶点的数量时,我想列出一个成对的列表,每一对都会给我一个给定顶点的信息,但我不知道怎么做 (例如,如果有4个顶点,则列表应为((0,-1)(0-1)(0-1)(0-1))“-1”将类似于无穷大,因为0下没有“权重”) 我确信有1182498种更好的方法来实现这个算法,但我想尝试一下我的想法。但我仍然没有足够的计划经验 以下是我的错误代码:Graph &引用;mcar:违反合同;新方案需要一些答案:),graph,scheme,Graph,Scheme,我不熟悉这个计划,我有一些问题 首先我想做一个图,然后用它来做一些东西(比如Dijkstra等等),首先我想做一个函数,返回顶点的计数(不确定这是不是一个单词)。但我得到了这个错误,我只是不知道这是什么,为什么我得到它 另外,当我得到顶点的数量时,我想列出一个成对的列表,每一对都会给我一个给定顶点的信息,但我不知道怎么做 (例如,如果有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))))
如果列表为空,则不能使用
car
,因此测试只是(null?G)
,而不是(null?(car G))
此外,在0
后面有一个右括号,这是错误的,这既与逻辑有关,也因为在方案中,if
需要有一个else部分(可以在时使用,也可以在时使用,除非以避免这种情况)
所以代码应该是
(define (getNumV G)
(if (null? G)
0
(+ 1 (getNumV (cdr G)))))
所以
(display (getNumV G))
=> 6
此外,请尝试正确缩进代码,并且不要有悬空的右括号
为过程的list参数使用一个通用名称,例如lst
,而不是真正的listG
,会更简洁:
(define (getNumV lst)
(if (null? lst)
0
(+ 1 (getNumV (cdr lst)))))
(display (getNumV G))
=> 6
请注意,您可以使用内置过程length
而不是getNumV
:
(display (length G))
=> 6
您可以保留名称(define getNumV lenght)
而不只是使用lenght
,非常感谢!真的很好的回答,我不知道长度是可用的。我可以用它来获取内部列表的编号吗?(我为我的英语感到抱歉,我的意思是如果我想知道(汽车G)的尺寸是否合适?@uselpa再次感谢你。你能帮我解决列表(0-1)(0-1)的第二个问题吗。。。我真的很抱歉,我知道这可能很简单,但是如果我列出((0-1)(0-1))并且现在我想更改第二个“-1”,我应该做类似(+1(cdr(cdr列表)))的事情,还是我必须做一些不同的事情?请将这作为一个单独的问题,以便您有足够的空间来准确描述您想要的内容。