明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3359|回复: 13

[讨论] Lisp需要有不固定参数的自定义函数吗?

[复制链接]
发表于 2014-11-10 21:13:58 | 显示全部楼层 |阅读模式
本帖最后由 飞诗(fsxm) 于 2014-11-10 21:13 编辑

像lisp系统函数很有这个功能:比如
(getint [msg])
输入整数,msg 这个是可选参数
(- [number number] ...)
减法,如果多个参数,就是前面的依次减去后面的,如果只一个数字,就是返回负数
等等。。。。。
以前不死猫老师也做过这方法的尝试~
http://bbs.mjtd.com/forum.php?mo ... D110%26typeid%3D110

但是有没有个更简单方便的方法来实现这些功能呢?

比如我想定义一个函数 myGetint,
(myGetint [msg] [def])
其中,msg是提示信息,def是默认值
当用户空格或回车时,就返回这个默认值~
但是 lisp的自定义函数还真不好实现~
很多人都定义成这样
(myGetint (list [msg] [def]))
这的确是个好方法,只是书写麻烦了点每次都多了一层list+括号!

现在问题来了:飞诗编辑器可以实现这个功能,这个大家需要吗???
(实现方法原理就是加函数签名,跟c++ C#之类的同理)
比如用户定义了三个同名函数
(defun myGetint() ...)
(defun myGetint(msg ) ...)
(defun myGetint(msg def) ...)
编辑器检测到同名函数后,自动附加签名成为三个函数
myGetint_*0
myGetint_*1
myGetint_*2

但用户调用时,直接按同名调用
(myGetint "请输入整数" 10)
提示用户输入整数,如果不输入,就默认为10,,
当编辑器检测到myGetint时,分析后面带了两个参数
自动将myGetint,修改为带签名的调用
(myGetint_*2 "请输入整数" 10)

当然,这些用户是不用去理会的,
只当他是同一个函数,有三种调用方式!

当然,还要自定义apply。。等等
*

















"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-11-10 21:51:30 | 显示全部楼层
支持,就是不知道这个怎么去实现,是不是一定要用你的编辑器编译呢?

点评

用编辑器写再另输出为标准lisp文件~先做功能调查,要的人多再做  发表于 2014-11-11 01:09
发表于 2014-11-10 22:01:48 | 显示全部楼层
个人认为这样会使LISP代码丧失通用性,如果不使用专用的编辑器,会导致运行失败。

与其借着LISP的壳,不如另起炉灶,做一个自己的语言了。
 楼主| 发表于 2014-11-10 22:05:35 | 显示全部楼层
vectra 发表于 2014-11-10 22:01
个人认为这样会使LISP代码丧失通用性,如果不使用专用的编辑器,会导致运行失败。

与其借着LISP ...

不会啊,按我上面说的
你写的代码转换为标准的lisp代码,到哪台电脑都一样运行!
也不用另外的函数库!通用性不存在问题
发表于 2014-11-11 08:44:03 | 显示全部楼层
没看懂。。。
似乎只是表象实现了多个不定参数。
实质仍然是多个函数定义。

点评

所有语言都是这样的实现方式,用户看到的永远只是表像!  发表于 2014-11-11 13:41
发表于 2014-11-11 09:07:50 | 显示全部楼层
没理解有什么意义,楼主的就像是编辑器的容错处理,定义了同名函数会自动变成加后缀的函数,如果只是这样,恕我愚钝,本人以为这是不好的容错,这种错误会助长坏习惯的养成,对以后的实际使用有害无益。
说实话,不死猫的帖子我也没看懂,到底要做什么?最后调用不还是(call_func lst)的形式么?现在的defun就可以。
 楼主| 发表于 2014-11-11 13:40:34 | 显示全部楼层
ll_j 发表于 2014-11-11 09:07
没理解有什么意义,楼主的就像是编辑器的容错处理,定义了同名函数会自动变成加后缀的函数,如果只是这样, ...

可能去了解下别的语言,比如C++,C#,java等等比较流行的语言,
都有这些功能的!不定参数函数是常见需求!
比如你要定义
(myGetint "你好请输入整数")
(myGetint "你好请输入整数" 10);用户不输入就默认10
因为参数不固定,现在的alisp是定义不了这样的~
发表于 2014-11-11 14:37:51 | 显示全部楼层
语言限制,Lisp 没有 函数重构
发表于 2014-11-11 17:17:55 | 显示全部楼层
需要这个功能,一开始学lisp的时候就有这个困惑。
但是alisp毕竟不是商业语言,语法结构也非常不严格, 如果函数重定义在大型函数库中感觉有可能会出问题,但对于写小程序来说还是不错的。
不过个人感觉还是(list [msg] [def])这种写法跟贴近lisp的语法结构。
 楼主| 发表于 2014-11-11 22:36:42 | 显示全部楼层
好吧,看来大多数人都不需要本功能!那就不做了~本帖over
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-21 13:03 , Processed in 0.204034 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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