具有相同长度的两个输入列表与具有不同长度的两个输入列表的行为不同(方案)

用户名

代码“ tsFunc”将两个列表作为输入,并将两个列表中的每个元素配对。它适用于大多数情况。但是当我给出两个相等长度的列表时,我发现了一个奇怪的行为(例如'(1 2)'(3 4)....或'(abc)'(1 2 3)....,它可以工作奇怪的是,首先,这是代码。

[问题1]

(define (tsFunc lst1 lst2)
 (define (helper ls1 ls2 rst)  
  (reverse (if (or (null? ls1) (null? ls2))                          
      rst                                                   
      (helper (cdr ls1) (cdr ls2)               
                (cons (cons (car ls1) (car ls2)) rst)))))
(helper lst1 lst2 '()))

这样的行为:

1)列表长度不均匀的正确行为:(tsFunc'(1 2 3)'(ab))====>输出:((1。a)(2。b))

2)具有偶数长度的列表的奇怪行为:(tsFunc'(1 2 3)'(abc))===>输出(错误):((3 .c)(2. b)(1 .a))= ==>预期的:((1.a)(2.b)(3.c))

当两个输入列表的长度相同时,会发生什么情况?tsFunc逻辑在长度相同的输入列表与长度不同的输入列表之间有不同的行为吗?(请注意。据我所知,代码需要对最终结果进行“反转”。因此,这并不是因为代码中的“反转”)

[问题2]的结果为tsFunc => tsFunc结果:(1。2)(3。4)=>尝试实现这样的乘积(1 * 2)+(3 * 4)= 14,所以我喜欢这..

(define (func l1 l2)
 (tsFunc (l1 l2)                              ;; line 2 - how to call tsFunc's result??
  (foldl (lambda (acc pair)                   ;; line 3
       (+ acc (* (car pair) (cdr pair))))     ;; line 4
     '()
     l1 l2)))                                 ;; like this?? or ??

第3行,第4行ok ..那是逻辑,然后如何调用tsFunc结果以将其用作输入,以及最后一行的两个列表..不清楚。

奥斯卡·洛佩兹(Oscar Lopez)

第一个问题是您在每次迭代时都会反转列表,如果确实需要反转输出,请在最后只执行一次:

(define (tsFunc lst1 lst2)
  (define (helper ls1 ls2 rst)
    (if (or (null? ls1) (null? ls2))
        (reverse rst)
        (helper (cdr ls1) (cdr ls2)
                (cons (cons (car ls1) (car ls2)) rst))))
  (helper lst1 lst2 '()))

现在,对于第二个问题-代码甚至无法编译:您没有正确地调用该tsFunc过程,并且在错误的地方调用了它。另外,accumulator参数的初始值是错误的-如果要返回数字,则不能使用列表

(define (func l1 l2)
  (foldl (lambda (acc pair)
           (+ acc (* (car pair) (cdr pair))))
         0
         (tsFunc l1 l2)))

使用问题中的样本输入,这是它的工作方式:

(func '(1 3) '(2 4))
=> 14

在上面tsFunc'(1 3)'(2 4)作为输入,将它们转换为所需的内容'((1 . 2) (3 . 4)),然后对其进行foldl预成型(1*2)+(3*4) = 14

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

迭代两个具有不同长度的向量

如何比较两个具有不同长度的列表并删除一些元素?

绘制两个具有不同长度的相同比例的系列

在具有不同实例数的特定列上合并两个不同长度的数据帧

熊猫-比较两个具有不同索引和不同长度的列

Matlab:比较两个具有不同长度和不同值的向量吗?

不同长度的两个列表的循环组合

合并两个不同长度的python列表

遍历两个不同长度的列表

如何交织两个不同长度的列表?

加入两个不同长度的列表

在python中合并两个不同长度的列表

遍历两个不同长度的列表

如何在JavaScript中映射具有不同长度的两个对象数组的属性

使C#中两个具有不同长度的信号相关

合并两个具有不同长度,键和值的对象

比较两个具有不同长度的2D数组以进行匹配

bash比较两个文件中具有不同长度的多列

比较两个相同长度但在JS中内部具有不同对象ID的数组

如何在 R 中合并具有不同长度和两个条件的两个数据帧?

合并两个相同长度但键不同的数组?

Python:两个相同长度的列表的元素连接

从现有的两个具有不同长度的数据框中填充新列

逐行比较两个不同长度的数据帧,并为每行添加具有相等值的列

如何在Python中划分两个具有不同长度和重复索引的数据框

在一帧中以block_wise索引连接两个具有不同长度的数据帧

如何为matplotlib图组合两个或多个具有不同长度时间序列的pandas数据帧?

合并两个数据框以匹配具有不同长度的日期(不同的标题)

Python:比较具有两个不同列表长度的列表中的字符串