list - 如何将 char 转换为 common lisp 中的符号?
问题描述
完全 lisp 初学者在这里。
我想知道如何将字符转换为符号。我想要的只是转换#\a
为a
这是我到目前为止所做的:
(defun convert(char)
(if(eq char #\a)
(setq char 'a))
char)
这实际上是可行的,但我不想添加 26 个条件(字母表中的字母)并制作一个冗长的代码。
另外我想知道 common lisp 中是否有任何函数可以将字符列表转换为符号列表,例如:(#\h #\e #\l #\l #\o)
to (h e l l o)
?我已经找到intern
并make-symbol
与之相关,但它们需要字符串作为参数。
解决方案
CL-USER 230 > (intern (string #\Q))
Q
NIL
CL-USER 231 > (intern (string #\q))
\q
NIL
顺便说一句,您的代码有很多必要的改进:
(defun convert(char) ;
(if(eq char #\a) ; use EQL instead of EQ for characters
; indentation is wrong
(setq char 'a)) ; indentation is wrong
char) ; indentation is wrong
最好写成:
(defun convert (char)
(if (eql char #\a)
'a
char))
或者
(defun convert (char)
(case char
(#\a 'a)
(#\b 'b)
(otherwise char)))
如上所述,“真正的”解决方案是:
(defun convert (char)
(intern (string char)))
推荐阅读
- javascript - 在函数内调用函数时 React 的范围问题
- android - 为什么即使创建了变量也没有初始化?
- android - 内部测试轨道的发布要求 - Google Play 商店
- excel - 使用Vlookup,但是数组单元格中有公式,怎么办?
- node.js - 在 NodeJS 应用程序中集成 SQL-Server
- c# - 在 .NET Core EF 中,如果使用 .Select() 比 ToListAsync() 运行,为什么 Query 运行得这么快?
- javascript - 返回承诺的循环库 - 同步
- python-3.x - 根据条件返回列表中的最大总和
- sql - Oracle - 将 NOT NULL 约束添加到当前可为空的列
- ios - 如何使用 VideoSubscriberAccount 框架向 Apple SSO(电视提供商)进行身份验证