首页 > 解决方案 > 通过 Scheme 对列表中的所有元素进行平方

问题描述

我想通过 Scheme 编程语言对列表中的所有元素进行平方。我的代码是:

(define (square n) (* n *n))

(define (fun items factor)
  (if (null? items)
      0
      (cons (* (fun (car items)
                    factor))
            (fun (cdr items)
                 factor) ) ) ) )
(display (fun '( 1 2 3 4) square))

我正在显示这些错误:

ERROR: In procedure car: 
  ERROR: In procedure car: 
    Wrong type (expecting pair): 1

标签: functionschemeracket

解决方案


你有几个错误:

  • 该程序有一个不应该存在square的额外内容*
  • 如果我们正在构建一个列表作为输出,那么基本情况应该返回空列表'(),而不是0
  • 对列表的当前元素进行操作的部分不正确,您只需调用列表factor上的过程即可car,无需再次乘法,square会处理的。

这应该修复它们:

(define (square n) (* n n))

(define (fun items factor)
  (if (null? items)
      '()
      (cons (factor (car items))
            (fun (cdr items) factor))))

在现实生活中,你不需要自己实现这个过程,map它已经内置了,使用起来很简单:

(map square '(1 2 3 4))
=> '(1 4 9 16)

推荐阅读