回答
还有那些功能车和CDR,使您可以采取部分列表。函数追加允许您将两个列表合并为一个。我认为他们可能会来得方便。同时检查一下cons函数,并确保你理解列表的实际内容,以及它与pair有什么关系。
举例如下。拿出你的名单,把第一个元素删除并检查它是什么。如果是被删除的那个,就丢弃它。如果它不是要删除的元素,则处理列表的其余部分,然后在开始处追加该元素。
perl2scheme -s \ 'use strict; sub remove_first { \ grep { $_ ne $_[0] || $first++ } @{ $_[1] }; } \ print join(",",remove_first("b", ("a","b","c"));'
执行perl2scheme的一小部分余下的任务留给读者作为excercize。
想想你想完成什么。
你有一个东西的列表,你正试图删除某个元素。
example: trying to remove b
(a a a a b a a b a ...)
anything before first b should be kept and anything after it also..
so we have to spit out from our function:
a a a a + a a b a ...
如果我们将这一数字减少到递归操作:
at any point looking through the list you can:
1. inspect element at front of the list and give it out to the result
and recursively inspect the rest of the list
2. stop if you found your element and
give out the rest of the list as you've accomplished your task
像这样的东西(如果它是一门功课):
(define (remove-first-occurence some-list find-symbol accum)
(cond
[(empty? some-list) accum]
[else (cond
[(= (first some-list) find-symbol) (cons accum (rest some-list))]
[else (remove-first-occurence (rest some-list) find-symbol (cons (first some-list) accum))]
)]))
(remove-first-occurence '(1 2 3 4 3) 3 empty)
(定义(删除-一线发生列表元素accum) (cond
((null?list)accum) (else (cond ((=(轿厢列表)组件)(利弊ACCUM(CDR列表))) (否则(删除先occurence(CDR列表)组件(利弊(汽车列表)ACCUM))) ) ) ) )
(除去先occurence“(1 2 3)2”())
不知道你想要什么,而是先用一个指标简单地启动它,这是相当多的,你怎么也得“思考'与计划,首先开始'如果它是第一个元素?',答案当然是它应该是列表的其余部分。然后'好的,如果它不是第一个',那么答案是'它应该首先考虑到对其余部分应用相同过程的结果',这就是所有信息方案在这方面的需求,并且很多情况下真。
(define (slice-out lst k)
(if (<= k 0) (cdr lst) ; if we want to remove the first (0) element, surely the result is simply the tail of the list?
(cons (car lst) ; if it's higher than 0, we just cons the first element...
(slice-out (cdr lst) (- k 1))))) ; to the result of the same method applied to the tail but with one lower k.
> (slice-out '(a b c d e) 2)
===>(a b d e)
如果列表对索引来说太短,此函数将返回一个错误。
但是,如果你想通过一些平等另一个目的是切出来,这个例子就足够了,我们现在不再切出来的,我们达到0,但如果它等同于搜索例如:
(define (slice-out-by-equality lst search)
(if (equal? (car lst) search) (cdr lst)
(cons (car lst)
(slice-out-by-equality (cdr lst) search))))
> (slice-out-by-equality '(a b c d e) 'c)
===> (a b d e)
使用相同的原理,但是如果该项不是找到,则返回错误。
的一点是,方案具有平等的比较多的口味,所以,我们真正想要的是这样的:
(define (make-slice-out comparison)
(lambda (lst search)
(let loop ((lst lst))
(cond
((null? lst) '())
((comparison (car lst) search) (cdr lst))
(else (cons (car lst) (loop (cdr lst))))))))
这个例子说明了什么计划是一回事,不知道你是否正在与它知道,但是我们在这里使用了一个闭包,这个函数实际上将任何二进制比较函数作为参数,然后求值到你想要的函数,它也被消毒,如果没有找到,它不会再犯错误,它只是简单地返回它返回旧列表,因为如果它到达列表的末尾,没有删除任何东西,它只是将它再次提交给()。
> ((make-slice-out =) '(1 2 3 6 3) 6)
===> (1 2 3 3); we just made an anonymous function here.
但是记住我们最初的功能,我们现在可以定义它只是这样,供应谓语时“平等的吗?”我们的新功能其实取值为我们的老功能(与它现在消毒的重要资产):
(define slice-out-by-equality (make-slice-out equal?))
而且,还有更多的二进制比较,这个怎么样更奇特的例子:我们
(define slice-out-less-than (make-slice-out <))
做函数这个方式,切片指出,严格大于我们的搜索词少的第一个元素,所以这会作用:
> (slice-out-less-than '(573 284 238 174 92 47) 100)
====> (573 284 238 174 47)
即使47也小于100,92是第一那些是。
- 1. 当删除最后一个元素,jquery删除第一个元素
- 2. Vuex仅删除第一个元素
- 3. 删除3元素元组的第一个元素
- 4. 如何删除第一个元素并使第二个元素成为java.util.NavigableSet中的第一个元素?
- 5. 双链表为什么不能删除第一个元素
- 6. 如何删除所有元素除jQuery中的第一个元素和第二个元素?
- 7. 删除解决方案后功能未被删除
- 8. 在球拍列表中删除第n个元素的功能版本
- 9. 移除QMap的5个第一元素
- 10. javascript只删除每一个第二个元素
- 11. 删除数据库中的第一个元素SQL查询
- 12. 如何删除数组中元素值的第一个实例?
- 13. 如何删除用户控件的第一个元素?
- 14. 如何删除列表中的第一个元素
- 15. array_shift不删除数组的第一个元素
- 16. 删除HTML块中的第一个IMG元素
- 17. 删除Char *阵列中的第一个元素Objective C
- 18. 删除第一个元素的双向链表
- 19. 在Scala中删除列表的第一个元素
- 20. 如何使用c#删除XML的第一个元素?
- 21. 删除ArrayList中第一个元素的所有发行版
- 22. 删除xml中的第一个子元素
- 23. 只删除jquery选择中的第一个元素
- 24. 如何将两个html元素绑定在一起,当第一个被删除第二个也从DOM删除
- 25. 获得第一个元素(取功能)的DSTREAM
- 26. 单一功能的多元素元素
- 27. 删除方案中的BST中的元素
- 28. 删除第二个和第三个元素
- 29. 删除元素,jQuery的 - 第2部分
- 30. 从数组中删除第一个元素的最佳方法是什么?
这是功课吗?如果是这样,请标记为这样。 – 2010-05-02 11:45:46