gpt4 book ai didi

common-lisp - Lisp : How to MAPCAR “#x” over a list of HEX?

转载 作者:行者123 更新时间:2023-12-04 13:38:59 26 4
gpt4 key购买 nike

像下面这样使用#x ...获取十六进制值的十进制

> #xB1 
177
> #xA5
165
> #xFF
255

假设我们有一个十六进制列表,那么在列表上使用mapcar #x ...的正确语法是什么?以下无效:
> (mapcar #'(lambda (hex) `(#x,hex)) '(B1 A5 FF))

Reader error: Malformed number in a #b/#o/#x/#r macro. [Condition of type SIMPLE-ERROR]



谢谢。

最佳答案

#x是所谓的“阅读器宏”。这与使用引号(即“”)表示字符串非常相似。在读取/编译代码时执行它们。您真正想要的是一个可以在运行时从十六进制字符串转换的过程。您正在寻找的过程是parse-integer,它接受一个字符串并返回它表示的值。带有它的mapcar应该看起来像这样:

(mapcar (lambda (hex) 
(parse-integer hex :radix 16))
'("B1" "A5" "FF"))

请注意,这使用的是字符串,如果您要像建议中那样使用符号,则必须执行以下操作:
(mapcar (lambda (hex) 
(parse-integer (symbol-name hex) :radix 16))
'(B1 A5 FF))

如果您不知道符号和字符串之间的区别,建议您阅读以下内容: What exactly is a symbol in lisp/scheme?

关于common-lisp - Lisp : How to MAPCAR “#x” over a list of HEX?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25518614/

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