Recursion 创建从列表中给出偶数列表的lisp函数
我想为类创建一个函数,它将两个参数Recursion 创建从列表中给出偶数列表的lisp函数,recursion,scheme,racket,Recursion,Scheme,Racket,我想为类创建一个函数,它将两个参数L和L1作为列表,并将L中的所有偶数放入L1中 我已经试了好几个小时,但不幸的是我做不到 这是我的方案代码: (定义(对L L1) (续) ((和(非(空?L))(=(模(第一个L)2)0)) (开始(追加(列表(第一个L))L1(对(其余L)L1))) ((和(非(空?L))(=(模(第一个L)2)1)) (对(其余L)L1) (其他L1) )) 我假设您想使用L1作为累加器,并在最后返回其内容 关于您的代码: 如果L为空(null?),在cond的第一个子句
L
和L1
作为列表,并将L
中的所有偶数放入L1
中
我已经试了好几个小时,但不幸的是我做不到
这是我的方案代码:
(定义(对L L1)
(续)
((和(非(空?L))(=(模(第一个L)2)0))
(开始(追加(列表(第一个L))L1(对(其余L)L1)))
((和(非(空?L))(=(模(第一个L)2)1))
(对(其余L)L1)
(其他L1)
))
我假设您想使用L1
作为累加器,并在最后返回其内容
关于您的代码:
L
为空(null?
),在cond
的第一个子句中检查一次就足够了append
在需要追加列表时可以。在本例中,您附加了一个元素,因此cons
更好偶数?
谓词(定义(对L L1)
(条件((空?L)L1)
((偶数)(第一个L))
(对(其余L)(cons(第一个L)L1)))
(其他(对(其余L)L1)))
现在让我们测试一下:
>(成对(01 2 3 4 5 6 7)()
(6 4 2 0)
如您所见,它以相反的顺序返回数字。这是因为当我们在列表L
中从头到尾向下移动时,我们将cons
新值添加到列表L1
的头部(而不是尾部,就像append
那样)。要修复它,在第一个cond
子句中(反转L1)
就足够了,而不是简单地返回L1
我强烈推荐《小阴谋家》这本书。阅读后,即使在睡眠中,您也可以编写任何类型的递归函数;) 我假设您想使用
L1
作为累加器,并在最后返回其内容
关于您的代码:
L
为空(null?
),在cond
的第一个子句中检查一次就足够了append
在需要追加列表时可以。在本例中,您附加了一个元素,因此cons
更好偶数?
谓词(定义(对L L1)
(条件((空?L)L1)
((偶数)(第一个L))
(对(其余L)(cons(第一个L)L1)))
(其他(对(其余L)L1)))
现在让我们测试一下:
>(成对(01 2 3 4 5 6 7)()
(6 4 2 0)
如您所见,它以相反的顺序返回数字。这是因为当我们在列表L
中从头到尾向下移动时,我们将cons
新值添加到列表L1
的头部(而不是尾部,就像append
那样)。要修复它,在第一个cond
子句中(反转L1)
就足够了,而不是简单地返回L1
我强烈推荐《小阴谋家》这本书。阅读后,即使在睡眠中,您也可以编写任何类型的递归函数;) 非常感谢,先生。这个答案非常丰富,因为这是我第一次使用lisp。非常感谢,先生。这个答案非常丰富,因为这是我第一次使用lisp