Scheme高阶函数twice实现及基于列表的Set操作实现咨询
问题1 高阶函数twice实现与功能推导
实现代码
; 入参为单参数函数f,返回一个新函数:将f对参数执行两次 (define (twice f) (lambda (x) (f (f x)))) ; 示例用到的square函数定义 (define (square x) (* x x))
功能推导
(twice square)返回的函数逻辑为:对输入x执行两次square计算,即(square (square x)) = x^4,和示例((twice square) 2) = 16(2^4=16)匹配。(twice (twice square))是将上述x^4的函数作为入参传给twice,返回的新函数逻辑为对输入x执行两次x^4计算,即(x^4)^4 = x^16,和示例((twice (twice square)) 10) = 10^16 = 10000000000000000完全匹配。
问题2 列表实现Set的核心操作
你编写的set?函数是合法的集合校验逻辑,作用是判断输入列表是否为无重复元素的集合,只需要补充member?和insert两个函数即可正常运行,实现代码如下:
1. member? 元素存在性判断
; 判断元素x是否在集合s中,存在返回#t,否则返回#f (define (member? x s) (cond ((null? s) #f) ((equal? x (car s)) #t) (else (member? x (cdr s)))))
2. insert 元素插入操作
; 向集合s中插入元素x,已存在则直接返回原集合,不存在则插入到列表头部 (define (insert x s) (if (member? x s) s (cons x s)))
运行验证
(member? 4 (list 1 2 4))返回#t,和示例一致。(insert 4 (list 1 2))返回(4 1 2),和示例一致。(insert 4 (list 1 2 4))直接返回原集合(1 2 4),不会产生重复元素。
内容的提问来源于stack exchange,提问作者The Coder
相关产品推荐
相关产品推荐

