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);它会教你如何做所有这些事情。