20060510412 发表于 2018-9-12 01:31:05

mapcar和lambda联合使用,出问题怎么解决


代码如上图所示,运行的时候,总是提示错误,如下图所示:

请问该怎么解决?
现在刚刚入门visual lisp,好多东西都不懂,只能一点一点地学习,请大家不吝赐教。

20060510412 发表于 2018-9-12 09:21:20

Andyhon 发表于 2018-9-12 08:42
是这个吗? 不甚相同
Command: (mapcar 'cons tag lst)
(("layout" . "layout1") ("name" . "桥型布置图") ...

我大致上理解两个mapcar嵌套的作用了,内层的mapcar,是为了定义一个函数,这个函数对两个列表进行cons函数处理,生成dotted pair(具体不知道是啥东西,看官方帮助上这样讲)。
外层的mapcar,则是将函数中的自定义变量x替换为实际的列表lst。

20060510412 发表于 2018-9-12 08:31:43

yshf 发表于 2018-9-12 08:28
“返回的结果应该是(“layout.layout1” “name.桥型布置图” “number.1” “sum.8”)这个样子”
如果 ...

哦,就是说出错是在前两行么?那应该怎么修改呢?
我主要还是想读懂leemac的代码,其实程序里的是第三行,前两行是我自己写的,为了给列表赋值

Andyhon 发表于 2018-9-12 08:42:11

是这个吗? 不甚相同
Command: (mapcar 'cons tag lst)
(("layout" . "layout1") ("name" . "桥型布置图") ("number" . "1") ("sum" . "8"))

Andyhon 发表于 2018-9-12 08:09:12

既是错误,建议您说说什么才是想要的输出!?
如此才能有个调整订正的方向

20060510412 发表于 2018-9-12 08:12:25

这个是leemac程序中的某一句,我把他摘出来独立运行,想看看效果。这句应该是把两个列表中的元素两两组合,行成一个新的列表

20060510412 发表于 2018-9-12 08:12:45

我在调试的时候看过效果

20060510412 发表于 2018-9-12 08:13:13

就是不知道为什么,单独拿出来的时候就不能运行了

20060510412 发表于 2018-9-12 08:15:30

返回的结果应该是(“layout.layout1” “name.桥型布置图” “number.1” “sum.8”)这个样子

20060510412 发表于 2018-9-12 08:21:24

Andyhon 发表于 2018-9-12 08:09
既是错误,建议您说说什么才是想要的输出!?
如此才能有个调整订正的方向

您好,能帮忙看一下么,多谢

yshf 发表于 2018-9-12 08:28:08

“返回的结果应该是(“layout.layout1” “name.桥型布置图” “number.1” “sum.8”)这个样子”
如果是这样,改为如下更易理解:
(setq lst1 (mapcar '(lambda(a b)(cons a b)) tag lst))
另外list为保留字,不要用作变量。

20060510412 发表于 2018-9-12 08:33:23

其实感觉这个mapcar函数有点像Excel中的数组公式,都是对一个区域进行运算
页: [1] 2
查看完整版本: mapcar和lambda联合使用,出问题怎么解决