If statement 在方案中使用if查找所有可能的值
我试着做家庭作业,但遇到了麻烦。。关于巴士和旅行者,有一些事实: 我尝试编写代码,提供到旅行者目的地的替代方式(可以是直接方式,也可以是最多一次传输)。例如:If statement 在方案中使用if查找所有可能的值,if-statement,scheme,If Statement,Scheme,我试着做家庭作业,但遇到了麻烦。。关于巴士和旅行者,有一些事实: 我尝试编写代码,提供到旅行者目的地的替代方式(可以是直接方式,也可以是最多一次传输)。例如: >(findways 'john) (list (list 'b002)) >(findways 'merry) (list (list 'b005) (list 'b001 'b002)) >(findways 'lerry) (list (list 'b006) (list 'b004 'b003) (list 'b
>(findways 'john)
(list (list 'b002))
>(findways 'merry)
(list (list 'b005) (list 'b001 'b002))
>(findways 'lerry)
(list (list 'b006) (list 'b004 'b003) (list 'b007 'b008))
所以。。首先找到不需要转移的方式,然后找到只需要一次转移的方式
在这些之后,我还需要找到另一个函数的最短路径:
>(findshort 'jhon)
(list 'b002) ; this is because the only way is
>(findshort 'merry)
(list 'b005) ; this because b005 travel time is 8, b001+b002 is 15
>(findshort 'lerry)
(list 'b004 'b003) ; this is because b006 is 18, b007+b008 is 16 but b004+b003 is 13
非常感谢
p、 学生:我不允许使用!让我们看看这不是一个完整的解决方案,但它应该可以帮助您开始。 尝试将问题分解为更小、更简单的函数,如:
;; (define buses ...)
;; (define voyagers ....)
(define findways
(lambda (voyager)
(find_bus_routes (lookup_voyager_route voyager voyagers) buses)))
(define lookup_voyager_route
(lambda (voyager voyager_lst)
(if (null? voyager_lst)
'()
(if (equal? voyager (caar voyager_lst))
(cdar voyager_lst)
(lookup_voyager_route voyager (cdr voyager_lst))))))
(define find_bus_routes
(lambda (sd_lst bus_routes)
(if (or (null? sd_lst) (null? bus_routes))
'()
(if (equal? (car sd_lst) (cadar bus_routes))
;; perfect match
(if (equal? (cadr sd_lst) (caddar bus_routes))
(cons (caar bus_routes) ;; keep bus number
(find_bus_routes sd_lst (cdr bus_routes)))
;; partial match could be improved
(cons (list (caar bus_routes)
(match_route (caddar bus_routes)
(cadr sd_lst) buses))
(find_bus_routes sd_lst (cdr bus_routes))))
(find_bus_routes sd_lst (cdr bus_routes))))))
(define match_route
(lambda (start dest routes)
(if (null? routes)
routes
(if (and (equal? start (cadar routes))
(equal? dest (caddar routes)))
(caar routes)
(match_route start dest (cdr routes))))))
一旦列出了可能的路线,就很容易计算出最短距离。我试图理解这段代码,但我感到困惑。。它没有给出正确的旋转,只是找到了开始城市,甚至它达到了3选项程序给出了错误:(我在这里格式化有点困难,你能提供你收到的错误吗?这段代码不完整,它应该只提供所有的选项。caddr:需要类型的参数;给定(列表(列表'b007'malibu'Atlanta 5)(列表'b008'Atlanta'ookala 11))我用advanced student写它,所以你写“caddar”,但我改为“caddr”如果您使用racket,请选择“从源代码确定语言”并使用#lang racket,我使用dr.scheme,但还有一个作业限制,我的代码必须使用高级学生语言:(此作业不适合初学的学生。特别是,它很难测试,因为“总线”不是函数的输入。如果是,我会要求您编写简单的测试用例;特别是当总线列表为空时出现的测试用例,当总线列表长度为1时出现的测试用例,等等。糟糕的讲师。或者本课程假设您已经是一名熟练的函数式程序员,在这种情况下问题是你的:(.:)这只是一个家庭作业,但我真的不明白老师是想教这门语言还是想让我们满足他的自我。我不是一个熟练的函数程序。只是一个学生。我有一个最好的建议:读一下如何设计程序(www.htdp.org);它会教你如何做所有这些事情。