gpt4 book ai didi

macros - lisp 从字符串创建属性列表

转载 作者:行者123 更新时间:2023-12-02 08:31:45 27 4
gpt4 key购买 nike

通用 LISP

这是我的问题:我想从 csv 文件中读取列标题,并从这些标题创建一个返回 plist 的函数,其中标题是属性名称:

假设我们有一个 csv 文件,其列标题为“姓名”、“日期”、“事件”。我想从这 3 个字符串创建一个函数,例如:

(defun read-csv-line (x y z)
(list :Name x :Date y :Event z))

以便阅读更多我会写的行:

(read-csv-line "Bob" "1/1/1985" "Birthday")

我认为宏可以解决问题:

(defmacro convert-to-plist (x y z)
`(defun read-csv-line (a b c)
(list :,(intern x) a :,(intern y) b :,(intern z) c)))

但是这种语法被认为是不正确的。

那你怎么说我能做到呢?当然,使用可变数量的参数会更好......

提前致谢!你的,

最佳答案

不如这样:

CL-USER 34 > (defun make-headers (strings &aux (package "KEYWORD"))
(mapcar (lambda (name)
(intern (string-upcase name) package))
strings))
MAKE-HEADERS

CL-USER 35 > (defparameter *headers* (make-headers '("Name" "Date" "Event")))
*HEADERS*

CL-USER 36 > (defun read-csv-line (&key (headers *headers*) line)
(pairlis headers line))
READ-CSV-LINE

CL-USER 37 > (read-csv-line :line (list "Bob" "1/1/1985" "Birthday"))
((:EVENT . "Birthday") (:DATE . "1/1/1985") (:NAME . "Bob"))

关于macros - lisp 从字符串创建属性列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25897254/

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