乐筑天下

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

[LISP]lisp程序中如何判断自己编制的lisp程序是否已被加载?

[复制链接]

2

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
12
发表于 2004-4-9 16:49:00 | 显示全部楼层 |阅读模式
在lisp程序中如何判断自己编制的lisp程序是否已被加载?我查到了如下说法:
〔引用〕在调用用户自己定义的函数之前,应先将包含该函数的文件调入内存(LOAD        "文件").但如果每次调用前都加载该程序,则会浪费很多时间.因此判别文件是否已经调入内存,则是非常重要的,这种用法在菜单文件十分普遍                 [RECTAN]         if        (not        rectan)        (load        "les2"));(rectan);         在文件内同样可以实现同样的检测。〔引用结束〕。
但我测试了一下,对于lisp程序好像不好使,请高手帮忙解决。
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2004-4-9 17:39:00 | 显示全部楼层
怎么会不好使呢?是你没用对吧...
如你定义这样:
(defun c:test() ...
...
)
则应为if        (not        c:test)        (load        "les2")) (c:test)
如果定义为:
(defun test()
        ...
)则应为if        (not        test)        (load        "les2")) (test)
回复

使用道具 举报

20

主题

872

帖子

10

银币

中流砥柱

Rank: 25

铜币
952
发表于 2004-4-9 18:42:00 | 显示全部楼层
  1. (defun _@ld (file)
  2.    (if (and
  3.   (not (member file _qaratoml))
  4.   (load (strcat _prefix file))
  5.            )
  6.        (setq _qaratoml (cons file _qaratoml))
  7.    )
  8.    (princ)
  9. )
这是一个软件中定义的Load函数,原理是构造一个表,记录加载过的Lisp。当加载Lsp文件时先判断表内是否有要加载的文件名。
回复

使用道具 举报

63

主题

1203

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1455
发表于 2004-4-9 20:10:00 | 显示全部楼层
判断是否已经加载没有必要
但是判断是否冲突,很有必要
如一个程序(c:tt),cad已经有另外一个程序也是(c:tt),或cad的简写定义为 tt                                 *text
这样会冲突。如何判断并避开。是个有意思的问题。
回复

使用道具 举报

2

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
12
发表于 2004-4-9 20:11:00 | 显示全部楼层
具體如如合用? 有點不理解那個 _qaratoml
回复

使用道具 举报

29

主题

1152

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1268
发表于 2004-4-10 07:58:00 | 显示全部楼层

_qaratoml 是表的名称,你可以用 _bdyatoml :)
回复

使用道具 举报

20

主题

872

帖子

10

银币

中流砥柱

Rank: 25

铜币
952
发表于 2004-4-10 10:01:00 | 显示全部楼层
太感谢大家了,尤其是meflying,看来这是个较初级的错误,见笑了。
另外,无痕的问题有解决吗?
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2004-4-10 10:35:00 | 显示全部楼层
1.如一个程序(c:tt),cad已经有另外一个程序也是(c:tt)
         ->不就是MEFLYING的(NOT C:TT)
2.cad的簡寫定義為 tt                                 *text
         ->可自已先做個表來查。
回复

使用道具 举报

63

主题

1203

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1455
发表于 2004-4-10 11:39:00 | 显示全部楼层


                               
登录/注册后可看大图

       
1.如一个程序(c:tt),cad已经有另外一个程序也是(c:tt)
         ->不就是MEFLYING的(NOT C:TT)那样就不加载后一个了。但是我要两个(不同的程序)都加载而且都能用。
回复

使用道具 举报

2

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
12
发表于 2004-4-10 12:05:00 | 显示全部楼层
这个想法似曾相识啊,好象刚有人提过类似的。。。
假设两个都加载了,那你键入tt,你想运行谁呢?难道又是你想运行哪个,电脑就自动运行哪个吗?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-8-15 22:11 , Processed in 0.611667 second(s), 73 queries .

© 2020-2025 乐筑天下

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