首页 > 解决方案 > 如何在方案/球拍上做一个乘法表

问题描述

所以我对Scheme非常陌生,我一直在尝试做一个乘法表,如果你放(乘法表10 3)应该给出一个列表(3 6 9 12 15 18 21 24 27 30)

这是我的代码

(define (multiplying-table n value)
  (cond ((= n 0) '())
        (else (* n value)(Multiplying-table(- n 1)))))

标签: listschemeracketmultiplication

解决方案


您需要使用cons将第一个数字3与其余的列表结合起来。

例如。(3 6 ...)(cons 3 (cons 6 ...))。相反,您有两个表达式,其中(* n value)仅用于效果,因为从未使用过结果。因此,每次调用都应返回空列表。

通常有两种方法可以做到这一点。内部递归cons或累加器。由于列表是从头到尾创建的,因此您可以倒数n并从头到尾构建列表。基本情况将只返回默认情况下为空列表的累加器。这是一个例子:

(define (sequence from to)
  (let loop ((n to) (acc '()))
    (if (< n from)
        acc
        (loop (- n 1) (cons n acc)))))

(sequence 5 10) ; ==> (5 6 7 8 9 10)

推荐阅读