list - 如何在方案/球拍上做一个乘法表
问题描述
所以我对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)))))
解决方案
您需要使用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)
推荐阅读
- java - 基于 OSGi 的应用程序(Karaf)中同步方法上的线程死锁
- reactjs - 当应用程序使用 react-native-background-task 在后台运行时,如何调用函数?
- python - 如何在python中用kivy语言(.kv)编写setter?
- azure-devops - 将 AzureDevOps 与 MS Teams 或 OneNote 集成,以便将文件发布到指定线程
- android - 用于在 Android 9 中后台运行应用程序的 Cordova 插件
- r - 将 r 中多列中的 Yes, No 替换为 1, 0
- javascript - Bounce Contact 按钮移到底部
- docker-volume - 来自守护程序的错误响应:无法在现有文件上安装卷,文件存在/合并/usr/local/etc/php/conf.d/local.ini
- linux - 通过命令行将本地文件拖放到浏览器窗口进行上传
- sql - 如何找到连续出现两次以上的号码?