递归函数不输出计算

问题描述 投票:0回答:1

我必须编写一个函数来遍历列表中的子列表并获取每个子列表中的第一个元素。我想我已经找到了正确的解决方案,但我只是不明白为什么它会在不先输出元素的情况下触发我的基本情况。

(define (sn-users graph)
(cond
  [(empty? graph)null]
  [else
   (caar graph)
   (sn-users (cdr graph))]))

这就是我所拥有的,我只是不知道出了什么问题。 这是我得到的输出:()

注意: 我只被允许使用无副作用的函数。

list recursion scheme racket
1个回答
0
投票

A Scheme

cond
有隐含的开始。这意味着如果要使用
if
重写您的代码。还没有,你需要这样写:

; empty? and null are racket specific. Not Scheme code. 
(define (sn-users graph)
  (if (empty? graph)
      null 
      (begin
        (caar graph)
        (sn-users (cdr graph)))))

begin
(并使用显式开始)的问题是除了最后一个表达式之外的所有表达式仅用于副作用。使用
(caar graph)
它什么都不做。

你想要的是列一个清单。您通常使用

cons
列出列表,所以我猜在调用
(sn-users '((1 2 3) (a b c) (I II III)))
时您的代码应该
(cons 1 (sn-users '((a b c) (I II III)))
.

祝你好运

© www.soinside.com 2019 - 2024. All rights reserved.