在Racket中将两个列表相乘

时间:2014-12-02 02:42:26

标签: list scheme racket

我使用Racket以相同的长度乘以列表。到目前为止,我已经尝试过:

(define (multiply-list a b)
  (if ([(empty? a) (empty)])
      else (cons(*car(a)car(b)))
      cdr(a) cdr(b)))                  

我无法理解Racket的语法。我想将列表更新为cdr。但我无法做到正确ab是列表。

1 个答案:

答案 0 :(得分:5)

我相信你的目标是这样:

(define (multiply-list a b)
  (if (empty? a)
      empty
      (cons (* (car a) (car b))
            (multiply-list (cdr a) (cdr b)))))

说明:

  • 在Scheme中,我们必须非常非常小心地放置一对()。在您的代码中,某些括号是不必要的,而其他括号则放错了位置。一个好的IDE可以帮助你把它们放在正确的位置
  • 例如,围绕条件的[]对是错误的,因此(empty)因为empty不是函数,我们用()包围某些内容当我们想把它称为函数
  • 我们不会调用这样的函数:car(a)。正确的方法是:(car a)
  • 当我们使用if时,表达式的替代部分不得以else开头,也许您会将if表达式与cond表达式混淆。
  • 最后但并非最不重要:不要忘记打电话给递归!