问题是当列表有不同的长度时,是否知道如何操作?
我必须使用像map这样的函数
这是我到目前为止编写的代码,它使用相同长度的列表,但它也需要使用不同长度的列表。谢谢。
domain=[('type', '=', 'external')]
如果列表长度不同,这就是我得到的:
map:所有列表必须具有相同的大小;争论是:#'(1 2 3 4 5)'(a b c)
我想得到(1 a 2 b 3 c 4 5)
答案 0 :(得分:3)
#lang racket
(define (weave xs ys)
(match (list xs ys)
[(list (cons x xs) (cons y ys)) (cons x (cons y (weave xs ys)))]
[(list '() ys) ys]
[(list xs '()) xs]))
答案 1 :(得分:2)
我假设你所希望的行为是,只要这是可能的,列表就是交错的,然后将非空列表中留下的任何内容附加到末尾。在这种情况下,一种可能的实现是
Runnable
我认为这可能是写出你想要的最简单的方法。
答案 2 :(得分:1)
map
和fold-right
都不会起作用,因为当一个列表小于另一个列表时它们会发出错误信号,或者它们倾向于停在最短列表中。例如。 SRFI-1' map (interleave '(1 2 3 4) (circular-list 9 8)) ; ==> (1 9 2 8 3 9 4 8)
。对于不同的行为,您需要自己动手。
答案 3 :(得分:1)
使用简单列表操作函数的解决方案可能是:
(define (interleave list1 list2)
(cond ((empty? list1) list2)
((empty? list2) list1)
(else
(append
(list (car list1) (car list2))
(interleave (cdr list1) (cdr list2))))))
...测试
> (interleave '(1 2 3 4 5) '(a b c))
(1 a 2 b 3 c 4 5)
> (interleave '(1 2 3 4 5) '())
(1 2 3 4 5)
> (interleave '() '(a b c))
(a b c)
>
我认为这是相当自我记录的。
答案 4 :(得分:0)
"在 一个牛仔对另一个说,spittin'进入篝火和海鹦'在晚上,他的雪茄,sippin'他的黑咖啡从他粗犷的罐子里拿出来。 " Yessa ,nothin'在整个世界中。"
fold-right