乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 9|回复: 9

[编程交流] 在mapcar lamb中调用函数

[复制链接]

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 22:18:26 | 显示全部楼层 |阅读模式
你好
 
我有个问题,我做了9个函数(g1 g2 g3 m1 m2 m3 p1 p2 p3)
我想在mapcar函数中调用它们中的每一个,这9个函数都在我函数的arg中的一个列表中:
 
让我们看看g1的例子
  1. (defun g1 (l) (if (eq (car l) 1) NIL (cons 1(cdr l))))

 
我的函数列表:(g1 g2 g3 m1 m2 m3 p1 p2 p3)
 
当我想调用他们获取该函数中的值时,它不起作用,请有人帮我?)
 
  1. (defun newopen (felem lop) (mapcar (lambda (y) (y felem)) lop))
  2. (newopen '(1 2 3) '(g1 g2 g3 m1 m2 m3 p1 p2 p3))
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 22:25:42 | 显示全部楼层
 
嗨,沙子,欢迎来到论坛,阅读第一篇
http://www.cadtutor.net/forum/showthread.php?9184-代码发布指南
 
可能是打字错误?
lambda报价缺失?
  1. [color="red"][b]'[/b][/color](lambda...)

 
而且
  1. if list=
  2. '(g1 g2 g3 m1 m2 m3 p1 p2 p3) ;
  3. you need, (([color="red"]eval[/color] y) felem)
  4. or just
  5. ([color="red"]list[/color] g1 g2 g3 m1 m2 m3 p1 p2 p3)

我们不知道其余部分如何工作g2 g3 m2。。。etc正在工作或有bug?
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 22:30:01 | 显示全部楼层
不知道eval函数,仍然无法使用newopen函数:
  1. (defun newopen (felem lop) (mapcar '(lambda (y) ((eval y) felem)) lop))

 
我有一个错误:FUNCALL:参数(lambda y)((eval y)felem))不是函数
 
其他功能g1 g2 g3等。。。正在工作:
  1. (defun g1 (l) (if (eq (car l) 1) NIL (cons 1(cdr l))))
  2. (defun g2 (l) (if (eq (car l) 2) NIL (cons 2(cdr l))))
  3. (defun g3 (l) (if (eq (car l) 3) NIL (cons 3(cdr l))))
  4. (defun m1 (l) (if (eq (car l) 1) NIL (if (eq (cadr l) 1) NIL (if  (eq (car l) (cadr l)) NIL (cons (car l) (cons 1 (cddr l)))))))
  5. (defun m2 (l) (if (eq (car l) 2) NIL (if (eq (cadr l) 2) NIL (if  (eq (car l) (cadr l)) NIL (cons (car l) (cons 2 (cddr l)))))))
  6. (defun m3 (l) (if (eq (car l) 3) NIL (if (eq (cadr l) 3) NIL (if  (eq (car l) (cadr l)) NIL (cons (car l) (cons 3 (cddr l)))))))
  7. (defun p1 (l) (if (eq (car l) 1) NIL (if (eq (caddr l) 1) NIL (if (eq (car l) (caddr l)) NIL (if (eq (cadr l) (caddr l)) NIL (append (list(car l)) (list(cadr l)) (cons 1 ())))))))
  8. (defun p2 (l) (if (eq (car l) 2) NIL (if (eq (caddr l) 2) NIL (if (eq (car l) (caddr l)) NIL (if (eq (cadr l) (caddr l)) NIL (append (list(car l)) (list(cadr l)) (cons 2 ())))))))
  9. (defun p3 (l) (if (eq (car l) 3) NIL (if (eq (caddr l) 3) NIL (if (eq (car l) (caddr l)) NIL (if (eq (cadr l) (caddr l)) NIL (append (list(car l)) (list(cadr l)) (cons 3 ())))))))
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 22:39:55 | 显示全部楼层
无评估
  1. (defun newopen1 (felem lop) (mapcar '(lambda (y) ([color="red"]y[/color] felem)) lop))
  2. (newopen1 '(1 2 3) ([color="blue"]list[/color] g1 g2 g3 m1 m2 m3 p1 p2 p3))

 
带eval:
  1. (defun newopen2 (felem lop) (mapcar '(lambda (y) (([color="blue"][b]eval[/b][/color] y) felem)) lop))
  2. (newopen2 '(1 2 3) [color="red"][b]'[/b][/color](g1 g2 g3 m1 m2 m3 p1 p2 p3))

这可以解释:报价
 
这是你的回报值?
  1. ;(nil (2 2 3) (3 2 3) nil nil (1 3 3) nil (1 2 2) nil)
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 22:43:17 | 显示全部楼层
是的,这是我的返回值。
 
我对你的两个函数都有错误:
 
newopen1=>错误:变量G1未绑定。
newopen2=>apply/funcall的参数不是函数:(LAMBDA(Y)((EVAL Y)FELEM))。
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 22:51:11 | 显示全部楼层
 
也许在2007版之后,lambda需要优化,尽管没有编译??
  1. (defun newopen2 (felem lop) (mapcar ([color="blue"]function[/color](lambda (y) ((eval y) felem))) lop))
  2. (newopen2 '(3 2 1) '(g1 g2 g3 m1 m2 m3 p1 p2 p3))
  3. ;((1 2 1) (2 2 1) nil (3 1 1) nil nil nil (3 2 2) nil)
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 22:51:25 | 显示全部楼层
不知道
 
已经试过了,它告诉我:(eval y)必须是LAMBDA表达式
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 23:00:45 | 显示全部楼层
正如hanhphuc所建议的那样,以下内容是正确的:
  1. (defun newopen ( felem lop ) (mapcar '(lambda ( y ) ((eval y) felem)) lop))

在我的测试中:
  1. _$ (newopen '(1 2 3) '(g1 g2 g3 m1 m2 m3 p1 p2 p3))
  2. (nil (2 2 3) (3 2 3) nil nil (1 3 3) nil (1 2 2) nil)

 
您使用什么软件/方法来评估代码?
您是在AutoCAD 2014命令行还是在VLIDE控制台中输入代码?
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:04:20 | 显示全部楼层
我在windows>上使用的是CLISP 2.49。
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:16:44 | 显示全部楼层
该死,我想在AutoCAD之前在CLISP上试试我的程序
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 06:24 , Processed in 0.883041 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表