Scheme中可变参数映射函数的实现(Implementation of variadic map function in Scheme)
正如你在下面的例子中看到的,Scheme中的map函数是可变参数函数。
> (map (lambda (number1 number2) (+ number1 number2)) '(1 2 3 4) '(10 100 1000 10000)) '(11 102 1003 10004)
我想实现这个可变参数选项,但我只能成功找到两个参数映射实现:
(define (map f lst) (if (null? lst) '() (cons (f (car lst)) (map f (cdr lst)))))
有人可以帮助我实现可变地图功能吗?
As you can see in the example below, map function in Scheme is variadic function.
> (map (lambda (number1 number2) (+ number1 number2)) '(1 2 3 4) '(10 100 1000 10000)) '(11 102 1003 10004)
I want to implement this variadic option, but I only succeeded to find the two arguments map implementation:
(define (map f lst) (if (null? lst) '() (cons (f (car lst)) (map f (cdr lst)))))
Can someone help me implement variadic map function?
原文:https://stackoverflow.com/questions/21629203
最满意答案
没有。
当您收到一条消息(
recvmsg()
)时,会通知您发送消息的对等方的IP地址; 当您响应(sendmsg()
)时,您指定消息所到达的IP地址。 这是通过一个套接字完成的。 另见<sys/socket.h>
。No.
When you receive a message (
recvmsg()
), you are told the IP address of the peer that sent the message; when you respond (sendmsg()
), you specify the IP address to which the message goes. This is done over a single socket. See also<sys/socket.h>
.
相关问答
更多-
UDP在连接的套接字上响应(UDP respond on connected socket)[2024-01-08]
我假设你发布的函数应该在客户端和服务器之间共享。 他们需要稍加修改才能实现这一目标。 例如,在服务器端, recvudp应返回客户端地址(可能作为out参数),因为稍后需要将消息发送回它。 此外,由于客户端地址结构已经填满(在服务器端recvudp或在客户端手动),我们可以将它传递给sendudp作为其参数。 我已经玩了这个,并在Visual Studio 2010中创建了两个简单的项目:UDP服务器和客户端。 它们都使用上面提到的共享功能。 此代码远非完美,仅旨在显示基本的UDP套接字通信。 Shared ... -
UDP(a)中的connect()函数告诉UDP在哪里发送所有数据报,因此您可以使用send()而不是sendto() ,并且(b)充当传入数据报的过滤器,因此您可以使用recv()而不是recvfrom() 。 它在网络上没有做任何事情:它只是一个本地操作。 它总是返回零,因为它不会失败。 但是,发送到不存在的目标可能会失败... 这些都记录在案。 The connect() function in UDP (a) tells UDP where to send all datagrams, so you ...
-
如果您没有获得任何流量,它可能只是被防火墙阻止。 在这种情况下,它不是关于转发,而是关于打开端口。 一旦通过NAT打孔,大多数(如果不是全部)NAT /防火墙设备将允许双向UDP流量。 也就是说,如果我的笔记本电脑位于NAT /防火墙后面,将UDP数据包发送到Internet,我的NAT /防火墙将允许将UDP流量返回到原始端口号。 我使用UDP工作很多,我的经验是这是规则,很少有例外。 请记住,虽然不保证传送UDP数据包。 您的客户端是否支持NAT? 客户端发送的任何数据包都会到达服务器吗? 服务器中的问 ...
-
没有。 当您收到一条消息( recvmsg() )时,会通知您发送消息的对等方的IP地址; 当您响应( sendmsg() )时,您指定消息所到达的IP地址。 这是通过一个套接字完成的。 另见
。 No. When you receive a message (recvmsg()), you are told the IP address of the peer that sent the message; when you respond (sendmsg()), you sp ... -
Android UDP套接字(Android UDP socket)[2022-04-09]
第一步是尝试硬编码另一台计算机的ip并进行测试。 如果可行,那么请查看添加UDP广播发现。 这是java中的一个例子: http : //michieldemey.be/blog/network-discovery-using-udp-broadcast/ 这个想法是所有需要在UDP上进行通话的设备。 一旦他们听到广播,他们需要连接到彼此。 通常,一方需要预先确定为服务器,另一方需要作为客户端。 The first step is to try and hardcode the ip of the othe ... -
是的,这没问题,是处理双向通信最方便的方法。 此外,如果客户端位于NAT后面,则打孔需要正常工作。 即使您绑定到客户端上的相同IP和端口,也不能保证在NAT中获得相同的映射。 因此,服务器可能无法访问客户端。 请记住,这些映射超时并从NAT网络内部启动,因此如果客户端长时间处于空闲状态,可能需要进行一些探测。 这取决于您如何设计应用程序,但这样做没有问题。 只需使用例如select监视套接字的读写状态即可。 如果创建一个与读/写队列结合的非阻塞套接字,则确保永远不会阻止操作。 由于UDP要么全部写入,要么什 ...
-
UDP套接字sendto()函数(UDP socket sendto() functions)[2021-09-06]
错误说你有一个无效的参数。 在阅读你的代码时,我可以说冒犯的参数是IP地址: 你将你的套接字绑定到127.0.0.1 您尝试将数据发送到另一个网络上的 192.0.0.1 如果要将数据发送到IP地址为192.0.0.1的主机,请将此套接字绑定到同一网络上的本地网络接口,或者在可找到到192.0.0.1的路由的网络上 如果我将套接字绑定到192.168.56.x (x是本地地址),我可以将数据发送到192.168.56.y (y是地址服务器); 但如果我绑定到127.0.0.1我得到IllegalArgume ... -
我没有看到整个代码,但我猜服务器和客户端是两个不同的可执行文件,并且ClientAnswerStruct类在两侧都定义了两次 。 当接收器对数据进行反序列化时,它会尝试重建一个ClientAnswerStruct对象,但找不到它的定义(注意它是在发送端定义的,虽然在接收端有一个名为ClientAnswerStruct的类,但它们并不相同) 。 这样做的正确方法是在独立类库中定义ClientAnswerStruct类,并让服务器和客户端代码包含它(C#术语中的“添加引用”)。 I didn't see the ...
-
不,浏览器不支持UDP。 此外,WebAssembly没有任何用于通信的API - 通过将JavaScript函数公开给WebAssembly模块来访问您必须执行此操作的任何网络API。 我认为您唯一的选择是使您的UDP消息适应WebSocket。 有商业产品可以做到这一点,例如Kaazing网关( https://kaazing.com/ ),可能有开源替代品。 No, browsers do not support UDP. Also, WebAssembly doesn’t have any APIs ...
-
单个插槽无法实现这一点。 根据定义,UDP套接字只能绑定到单个端口。 这就是这些插座的工作原理。 但是,您可以打开两个插槽。 然后,可能使用两个接受线程,可能使用其他机制(POSIX select )检测到这些线程的连接。 如何兼顾多个侦听UDP套接字取决于您的编程语言/套接字抽象。 That's not possible with a single socket. By definition, UDP sockets can only bind to a single port. That's how t ...