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

将列表中的每个元素转换为原子的Scheme程序,scheme,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))

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

    (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)
           )))))))))

有人能帮我吗?

我觉得你的代码有点杂乱无章,我想你可能需要考虑一下设计配方中的以下步骤:

第一步:你能为你的程序写一个目的陈述吗?它应该说明函数的作用

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

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


要了解更多设计配方的优点,请查看。

我觉得您的代码有点杂乱无章,我想您可能需要考虑设计配方中的以下步骤:

第一步:你能为你的程序写一个目的陈述吗?它应该说明函数的作用

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

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


有关设计配方的更多信息,请查看。

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

下面是一些您可以尝试和调试的方法

  • 使用Repl尝试函数的某些部分。例如,如果在cond中检查null,您也可以在REPL上执行此操作
(空?'(1 2 3))
(空?'())

  • 检查单个S-EXP。您确定您调用的每个函数都有一个开始和结束参数吗

  • 作为提示,简化你的条件。你不需要再做什么了。你可以把所有的条件一个一个地放进去


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

      下面是一些您可以尝试和调试的方法

      • 使用Repl尝试函数的某些部分。例如,如果在cond中检查null,您也可以在REPL上执行此操作
      (空?'(1 2 3))
      (空?'())

      • 检查单个S-EXP。您确定您调用的每个函数都有一个开始和结束参数吗

      • 作为提示,简化你的条件。你不需要再做什么了。你可以把所有的条件一个一个地放进去


      请输入和输出样本。首先:
      makelat(cdrl)
      非常错误。如果你搜索“展平”,你应该会找到一些东西。请输入和输出样本。首先:
      makelat(cdrl)
      非常错误。如果你搜索“展平”你应该找到一些东西。为什么在其他方面优秀的HtDP设计配方答案经常被屈尊地表达出来?这种语调,再加上这本书强加的非理性的语言限制,真的让我失去了一个有很多好建议的好资源。我道歉。再读一遍我的答案,我可以看出它读起来非常傲慢。在我的辩护中,我试图自嘲——当你对学生们说“遵循设计配方。遵循设计配方。遵循设计配方。第二条评论:我编辑了我的原始回复。你的评论被很好地采纳了。好吧,不管怎么说,这是一部分。你对不合理的手持限制,“不过,它不洗。真正的问题是:您是否考虑过被您描述的限制消除的错误类别?我看到了您的评论,然后再次回顾了HtDP语言。例如,我认为刚开始的学生语言缺少
      列表
      ,但我错了;这是本书的惯例。为什么要让学生写
      (cons 3(cons'dollars(cons'and)(cons 53(cons'cents empty(cons'empty)))
      ,而不是
      (列出3'dollars'and 53'cents)
      ?这纯粹是一种牵手行为,它会让优秀的学生感到气馁,因为他们无法学习列表的工作原理。也许问题在于我不同意这本好书的前提:我不认为每个人都可以也不应该学习编程。
      list
      函数在教学生如何编写递归函数时没有帮助,而且常常是有害的。我们希望他们能够理解递归数据,而不仅仅是列表!过早地教授一个一次性的缩写词来模糊结构是不可取的。有太多的程序员可以处理列表和数组,但当他们不得不处理树时,他们就崩溃了;我们希望避免生产更多的产品。为什么其他优秀的HtDP设计配方的答案经常被屈尊地表达出来?这种语调,再加上这本书强加的非理性的语言限制,真的让我失去了一个有很多好建议的好资源。我道歉。再读一遍我的答案,我可以看出它读起来非常傲慢。在我的辩护中,我试图自嘲——当你对学生们说“遵循设计配方。遵循设计配方。遵循设计配方。第二条评论:我编辑了我的原始回复。你的评论被很好地采纳了。好吧,不管怎么说,这是一部分。你对不合理的手持限制,“不过,它不洗。真正的问题是:您是否考虑过被您描述的限制消除的错误类别?我看到了您的评论,然后再次回顾了HtDP语言。例如,我认为刚开始的学生语言缺少
      列表
      ,但我错了;这是本书的惯例。为什么要让学生写