将列表中的每个元素转换为原子的Scheme程序

时间:2011-10-27 05:10:43

标签: scheme

我需要一个程序,它将列表作为输入,并将列表中的每个元素转换为原子。这是我到目前为止所做的,但我一直遇到错误。

    (define make-lat
      (lambda (l)
(cond
  ((null? l) (quote ()))
  (else
   (cond
     ((list? (car l))
      (cons (caar l)
            make-lat (cdr l)))
      (else 
       ((atom? (car l))
        (cons (car l)
       (make-lat(cdr l)
           )))))))))

有人能帮助我吗?

2 个答案:

答案 0 :(得分:3)

您的代码对我来说看起来有点混乱,我想您可能想要考虑遵循How To Design Programs设计方案中的步骤:

第一步:你能为你的程序写一个目的陈述吗?它应该说明这个功能是做什么的。

第二步:你能写一份合同吗?它应该说明程序采用什么样的数据,以及 它产生了什么。您必须具体,在这里,您指定的任何类型的数据必须是内置的或具有明确的“数据定义”。

第三步:编写一些测试用例!提供样本输入和您期望的输出。

要获得更多设计配方,请查看How To Design Programs

答案 1 :(得分:1)

你的问题看起来像是家庭作业。

以下是您可以尝试和调试的一些事项。

  • 使用Repl试用部分功能。例如,如果在cond中,您正在检查null,您也可以在REPL上执行此操作。

(null? '(1 2 3))(null? '())

  • 检查单个S-Exps。你确定你打电话的每个功能都有开启和关闭的功能。

  • 作为提示,简化您的cond。你不需要筑巢。你可以逐一列出所有条件。