gpt4 book ai didi

scheme - 全局变量和列表函数

转载 作者:行者123 更新时间:2023-12-04 06:08:53 26 4
gpt4 key购买 nike

功能 manageFirstList应该一次递归地将一个元素复制到全局列表 x。

(define test1DataA '(("a" "a") ("b" "b") ("c" "c") ("d" "d") ("e" "ok")))
(define test1DataB '(("a" "aa") ("b" "bb") ("c" "cc") ("d" "dd") ("ok" "Ir OK!")))

(define x '())

(define manageFirstList
(lambda (a b)
((cond ((not (null? b))
((append x (car a))
(manageFirstList (cdr a) b)))))))

(define ff (lambda (a b) (manageFirstList a b)))

(ff test1DataA test1DataB)

但它会导致错误:
car: expects argument of type <pair>; given '()

问题是:
  • 如何更新全局值“x”?
  • 如何以正确的方式连接列表?
  • 我可以像这样调用 1 个以上的函数(或者是否有解决方法):
    ((append x (car a))
    (manageFirstList (cdr a) b))

  • 编辑:我想要做的是创建一个列表,其中包含每个 test1DataA 列表项的第一个值和每个 test1DataB 列表项的第二个值,其中 test1DataA 列表元素的第二个值与其列表元素的 test1DataB 第一个值相同。

    最佳答案

    关于您的问题:

  • 尽管您可以使用 (set! x <value>) 从函数内部更新全局变量,你真的不应该,这不是使用 Scheme 编程的首选方式;相反,您应该从您的过程中返回一个新列表,如有必要,将返回的值分配给 x事后
  • 你所说的“正确的方式”是什么意思? append过程连接两个列表,这是正确的方法,如果你问我 :) 。你可以这样称呼它:(append a b) , 其中两个 ab必须是列表
  • 代码是错误的,因为您正在调用 append在一对额外的括号之间,Scheme 将尝试应用 (append ...) 返回的值。好像它是一个带参数的过程 (manageFirstList (cdr a) b) ,显然它会失败,因为 append返回一个列表,而不是一个过程。也许您应该准确解释“我可以调用多个函数”是什么意思-当然可以,但是您打算做什么?结合两个调用的结果?独立处理结果?

  • 无论如何,由于多种原因,上述过程将失败 - 您没有考虑列表为空的情况,您只是在其中一个列表上重复出现,等等。

    最后,在使用 (ff test1DataA test1DataB) 调用后,您应该清楚该过程的预期结果是什么。 ,你想在 x中看到的值是多少?把它写成你的问题的一部分,因为文本“一次递归复制一个元素到全局列表 x”不够清楚。

    编辑:

    好的,这是我回答您的问题的机会,希望我理解正确。请注意,我使用的是 assoc在第二个列表中搜索第一个列表中的每个第二个值的过程,因此将第二个列表解释为关联列表:
    (define (manageFirstList lst1 lst2)
    (cond ((null? lst1) '())
    (else (cons (list (caar lst1) (cadr (assoc (cadar lst1) lst2)))
    (manageFirstList (cdr lst1) lst2)))))

    现在,如果您绝对需要更改 x 的值全局变量,只需执行以下操作:
    (define x '())
    (set! x (manageFirstList test1DataA test1DataB))

    请注意我如何完全避免修改 x在程序内部,因为通常这不是解决问题的 Scheme 方法。最后, x中的值是:
    (("a" "aa") ("b" "bb") ("c" "cc") ("d" "dd") ("e" "Ir OK!"))

    关于scheme - 全局变量和列表函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8017766/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com