scheme - 将已知参数传递给 Scheme 函数
问题描述
我有一个函数primeFactors
,我想接受一个数字,并返回一个数字因子列表。看起来
(define (primeFactors x '()) ...FOOBAR)
无效,但是解决方法
(define (primeFactors x) (primeFactors2 x '()))
在primeFactors2
其他地方定义会起作用,因为我可以在调用函数但不定义它时将空列表作为参数传递。有没有一种不那么糟糕的方式来传递这种预先确定的参数?
解决方案
R7RS-Small 和 R6RScase-lambda
在库中(scheme case-lambda)
有(rnrs control 6)
:
#!r7rs
(import (scheme base)
(scheme case-lambda))
(define prime-factors
(case-lambda
((n) (prime-factors n '()))
((n lst) 'implementation)))
对于 R5RS,我们有SRFI-89 Positional arguments。也许你最喜欢的实现已经有了它,如果没有,你可以从规范中获取它。下面是它的工作原理:
#!r5rs
(define* (prime-factors x (lst '()))
'implementation)
一种纯粹兼容的 Scheme 方法:
;;; (prim-factors n [lst '()]) => lst
(define (prime-factors n . llst)
(define (prime-factors n lst)
'implementation)
(prime-factors n (if (null? llst) '() (car llst))))
本地函数只是为了在您进行递归的情况下提高效率,因为它只是没有第二个参数的初始调用。
推荐阅读
- python - 将 utf-8 字符串转换为 base64
- java - 如何强制 JPA 使用复合主键索引顺序
- javascript - 在 Materia UI 主题上设置的字体系列不适用于 Chrome 以外的浏览器
- babeljs - 是否可以从 Babel 独立缓存已编译的代码?
- javascript - React.js 我无法摆脱加载器图标
- javascript - 将 React 组件状态传递给另一个文件
- css - Material UI - 工具栏 - 垂直文本对齐
- ios - 如何在 Swift 中使用 Decodable 解析 JSON 元素。我这样做时收到错误
- javascript - 将数据从 JS 脚本插入 mysql 数据库
- node.js - 运行 npm install 时出错,返回 This is a bug in `node-gyp`