我怎样才能得到方案中的正偶数元素
How can i get the positive even elements in scheme
我正在尝试获取方案中的所有偶数和正数元素
我有以下代码
(define (getVals lis)
(cond
((null? lis) lis)
(((> (car lis) 0) (even? (car lis)))
(cons (getVals (cdr lis))))
)
)
要检查我的代码,我正在使用
getVals '(2 -2 4 6 5))
应该输出一个包含正数和偶数 (2 4 6) 的新列表
谢谢
最简单的方法是使用内置程序:
(define (getVals lis)
(filter (lambda (x) (and (even? x) (positive? x)))
lis))
如果你想从头开始实现它,你需要修复你的代码:
- 缺少当前元素不满足条件的情况(
else
情况)。
- 调用
cons
时缺少一个参数。
- 条件缺少
and
。
这就是我的意思:
(define (getVals lis)
(cond
((null? lis) lis)
((and (even? (car lis)) (positive? (car lis)))
(cons (car lis) (getVals (cdr lis))))
(else (getVals (cdr lis)))))
无论哪种方式,它都按预期工作:
(getVals '(2 -2 4 6 5))
=> '(2 4 6)
并且只是添加到@OscarLopez 的回答中 - 如果您再看一眼,您会发现,getVals
只是 `filter.
的特例
(define (getVals lis)
(cond
((null? lis) lis)
((and (even? (car lis)) (positive? (car lis)))
(cons (car lis) (getVals (cdr lis))))
(else (getVals (cdr lis)))))
对战:
(define (filter func lst)
(cond
((null? lis) lst)
((func (car lst))
(cons (car lst) (filter func (cdr lst))))
(else (filter func (cdr lst)))))
将 filter func
设为 getVales
,并且
func
为:
(lambda (x) (and (even? x) (positive? x)))
getVals
只是过滤器的一个特例:
(define (getVals lst)
(filter (lambda (x) (and (even? x) (positive? x))) lst))
但是你应该遵循 Lisp 语言的风格指南 -
不要对函数名称使用驼峰式命名,而更喜欢 lisp 类型的形式 get-vals
.
我正在尝试获取方案中的所有偶数和正数元素
我有以下代码
(define (getVals lis)
(cond
((null? lis) lis)
(((> (car lis) 0) (even? (car lis)))
(cons (getVals (cdr lis))))
)
)
要检查我的代码,我正在使用
getVals '(2 -2 4 6 5))
应该输出一个包含正数和偶数 (2 4 6) 的新列表
谢谢
最简单的方法是使用内置程序:
(define (getVals lis)
(filter (lambda (x) (and (even? x) (positive? x)))
lis))
如果你想从头开始实现它,你需要修复你的代码:
- 缺少当前元素不满足条件的情况(
else
情况)。 - 调用
cons
时缺少一个参数。 - 条件缺少
and
。
这就是我的意思:
(define (getVals lis)
(cond
((null? lis) lis)
((and (even? (car lis)) (positive? (car lis)))
(cons (car lis) (getVals (cdr lis))))
(else (getVals (cdr lis)))))
无论哪种方式,它都按预期工作:
(getVals '(2 -2 4 6 5))
=> '(2 4 6)
并且只是添加到@OscarLopez 的回答中 - 如果您再看一眼,您会发现,getVals
只是 `filter.
(define (getVals lis)
(cond
((null? lis) lis)
((and (even? (car lis)) (positive? (car lis)))
(cons (car lis) (getVals (cdr lis))))
(else (getVals (cdr lis)))))
对战:
(define (filter func lst)
(cond
((null? lis) lst)
((func (car lst))
(cons (car lst) (filter func (cdr lst))))
(else (filter func (cdr lst)))))
将 filter func
设为 getVales
,并且
func
为:
(lambda (x) (and (even? x) (positive? x)))
getVals
只是过滤器的一个特例:
(define (getVals lst)
(filter (lambda (x) (and (even? x) (positive? x))) lst))
但是你应该遵循 Lisp 语言的风格指南 -
不要对函数名称使用驼峰式命名,而更喜欢 lisp 类型的形式 get-vals
.