gpt4 book ai didi

for-loop - for 循环中的多个绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 06:42:30 25 4
gpt4 key购买 nike

所以,Racket (6.5) 文档说你可以一次绑定(bind)多个 id:

(for ([(i j) #hash(("a" . 1) ("b" . 20))])
(display (list i j)))

但是我无法弄清楚/找到如何使用手动构建的数据执行此操作的示例:

(define a '(1 2 3 4 5))
(define b '(10 20 30 40 50))
(for ([(i j) (map list a b)])
(display (list i j)))

爆炸

result arity mismatch;
expected number of values not received
expected: 2
received: 1
from:
in: local-binding form
values...:

我错过了什么?

最佳答案

这个

(for ([(i j) #hash(("a" . 1) ("b" . 20))])
(display (list i j)))

的缩写
(for ([(i j) (in-hash #hash(("a" . 1) ("b" . 20)))])
(display (list i j)))

现在 in-hash 一次返回两个值,因此 (i j)将绑定(bind)到这两个值。

另一方面,这个:

(for ([(i j) (map list a b)])
(display (list i j)))

的缩写
(for ([(i j) (in-list (map list a b))])
(display (list i j)))

in-list 将一次返回一个元素(在您的示例中该元素是一个列表)。由于(i j)中有两个名字而且不止一个,还发出错误信号。

并行遵循 Toxaris 的建议。

更新

以下帮助器 make-values-sequence 显示如何创建重复的自定义序列产生多个值。

#lang racket

(define (make-values-sequence xss)
; xss is a list of (list x ...)
(make-do-sequence (λ ()
(values (λ (xss) (apply values (first xss))) ; pos->element
rest ; next-position
xss ; initial pos
(λ (xss) (not (empty? xss))) ; continue-with-pos?
#f ; not used
#f)))) ; not used]


(for/list ([(i j) (make-values-sequence '((1 2) (4 5) (5 6)))])
(+ i j))

输出:

'(3 9 11)

关于for-loop - for 循环中的多个绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37469667/

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