明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1871|回复: 5

[提问] (defun sub () (mapcar '(lambda(x y) (defun x nil (princ y))) lst lst))

[复制链接]
发表于 2014-9-22 10:42 | 显示全部楼层 |阅读模式
求助
(defun sub () (mapcar '(lambda(x y) (defun x nil (princ y))) lst1 lst2))
可以实现吗?如果能
其中的x应该是什么类型的数据呢
发表于 2014-9-22 11:03 | 显示全部楼层
不行。
defun和setq的第一个参数是固定的符号名,不可以使用变量。
式: (mapcar '(lambda(x y) (defun x nil (princ y))) (list 'a 'b) '(1 2)) 返回:(X X),这里的X是无意义的。
set函数的第一个参数可以是变量,比如:
(mapcar '(lambda(x y) (set x (lambda(y) (1+ y)))) (list 'a 'b) '(1 2))
返回:
(#<SUBR @1a904988 -lambda-> #<SUBR @1a904988 -lambda->)
定义了两个函数a和b:
命令: (a 3)
4
命令: (b 3)
4


 楼主| 发表于 2014-9-22 16:41 | 显示全部楼层
ll_j 发表于 2014-9-22 11:03
不行。
defun和setq的第一个参数是固定的符号名,不可以使用变量。
式: (mapcar '(lambda(x y) (defun x ...

好吧,本想偷个懒,直接定义出直接使用的c:tt类型的函数名。看来是做不到了
发表于 2014-9-22 18:06 | 显示全部楼层
(defun sub ()
  (mapcar '(lambda (x y)
             (eval (append '(defun)
                           (list x)
                           '(nil)
                           (list (list 'princ y))
                           '((princ))
                   )
             )
           )
          '(a b)
          '(1 2 3)
  )
  (princ)
)
 楼主| 发表于 2014-9-23 09:17 | 显示全部楼层
ivde 发表于 2014-9-22 18:06
(defun sub ()
  (mapcar '(lambda (x y)
             (eval (append '(defun)

成功!膜拜
发表于 2021-2-14 19:18 | 显示全部楼层
没看明白啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-15 00:39 , Processed in 0.150906 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表