在scheme中查找图中两个节点之间的路径

在scheme中查找图中两个节点之间的路径,scheme,depth-first-search,Scheme,Depth First Search,有人能解释一下我为什么会出错: map: contract violation expected: list? given: 'e3 argument position: 2nd other arguments...: #<procedure> 非常感谢 您的后继者函数有一个“类型”错误。if的替代项返回一个列表(实际上是”()),而if的后续项返回的(cdr val)不是列表(基于输入数据)。这可从错误消息中确认-预期会出现列表?,但提供了符号? 看起来您

有人能解释一下我为什么会出错:

 map: contract violation
  expected: list?
  given: 'e3
  argument position: 2nd
  other arguments...:
   #<procedure>

非常感谢

您的
后继者
函数有一个“类型”错误。
if
的替代项返回一个列表(实际上是
”()
),而
if
的后续项返回的
(cdr val)
不是列表(基于输入数据)。这可从错误消息中确认-预期会出现
列表?
,但提供了
符号?

看起来您的图形表示是指节点名称和连接节点名称列表之间的关联。但是你的输入数据不是那种形式!尝试:

'((e1 e0) (e2 e1) ...)
顺便说一句,
后继者
的习惯用法是:

(define (successor node graph)
  (cond ((assq node graph) => cdr)
        (else '())))
(define (successor node graph)
  (cond ((assq node graph) => cdr)
        (else '())))