gpt4 book ai didi

arrays - 如何创建特定类型的通用 lisp (SBCL) 向量以在 usocket 中使用?

转载 作者:太空宇宙 更新时间:2023-11-03 18:41:33 24 4
gpt4 key购买 nike

我是 Common Lisp 的新手,我正在尝试学习如何使用网络套接字进行编程。在普通的 lisp 中 usocket api它指定函数 socket-sendsocket-receive 采用 simple-array (unsigned-byte 8) 缓冲区。

我对 lisp 太陌生了,无法理解如何在 sbcl common lisp 中实现这一点。看来我可以使用函数 vectormake-array 但不能使用 simple-array,也不能将类型指定为 unsigned -字节 8

像下面这样的东西是否合理且类型安全?:

  (let ((buffer (make-array (list-length input))) (input-length (list-length input)) )
(loop
for i upto input-length collect i do
(setf (nth i buffer) (parse-integer (nth i input))))
(usocket::socket-send socket buffer input-length)))

如果没有,我该如何制作我需要的缓冲区?

最佳答案

CL-USER 25 > (make-array 10
:element-type '(unsigned-byte 8)
:initial-element 0)
#(0 0 0 0 0 0 0 0 0 0)

CL-USER 26 > (describe *)

#(0 0 0 0 0 0 0 0 0 0) is a (SIMPLE-ARRAY (UNSIGNED-BYTE 8) (10))
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0

映射:

CL-USER 32 > (map '(simple-array (unsigned-byte 8) (*)) #'char-code "foobarbaz")
#(102 111 111 98 97 114 98 97 122)

或更简单

CL-USER 33 > (map '(vector (unsigned-byte 8)) #'char-code "foobarbaz")
#(102 111 111 98 97 114 98 97 122)

返回:

CL-USER 34 > (map 'string #'code-char #(102 111 111 98 97 114 98 97 122))
"foobarbaz"

关于arrays - 如何创建特定类型的通用 lisp (SBCL) 向量以在 usocket 中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45526302/

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