水木社区手机版
首页
|版面-函数式编程语言(FuncProgram)|
新版wap站已上线
返回
1/1
|
转到
主题:帮忙解释一下 Lisp 定义宏时的参数设定,谢谢!
3楼
|
Dieken
|
2020-12-31 23:04:02
|
展开
那个语法不是 dotted pair,而是 Common Lisp 的 Lambda list 语法,点表示 &rest。
http://clhs.lisp.se/Body/03_dd.htm
【 在 wolfgang (狂云) 的大作中提到: 】
: 标 题: Re: 帮忙解释一下 Lisp 定义宏时的参数设定,谢谢!
: 发信站: 水木社区 (Tue Nov 24 12:11:42 2020), 站内
:
: 关于 (a . b)的语法,其中b就相当于这个列表的cdr。
:
: 具体请参见这个文档:
:
https://www.gnu.org/software/emacs/manual/html_node/elisp/Dotted-Pair-Notation.html
: 也就是所谓的dotted notation
:
: 关于&body等等带着&的语法,可以参见:
:
:
http://www.gigamonkeys.com/book/macros-defining-your-own.html
:
http://clhs.lisp.se/Body/m_defmac.htm
:
:
:
:
: 【 在 snoopyzhao (只打酱油,不兼职) 的大作中提到: 】
: : 有这么两个common lips 宏的定义:
: : (defmacro destructuring-switch-bind (lambdalist expr . body)
: : (...))
: : ...................
:
: --
: 热二定律比动量守恒更高
: 它告诉我们世界的原初是恨
:
: 爱, 就是对恨的战斗!
:
:
: ※ 来源:·水木社区 newsmth.net·[FROM: 101.93.23.*]
--
FROM 111.193.29.*
4楼
|
Dieken
|
2020-12-31 23:06:47
|
展开
我只能说看这里,但是我也不懂。。。
http://clhs.lisp.se/Body/03_dda.htm
【 在 snoopyzhao (只打酱油,不兼职) 的大作中提到: 】
: 多谢,我大概知道了 (a . b) 的语法
: 对于这个问题,我现在的想法是,common lisp 的参数解析是复杂的,理解起来有点儿费劲,比如 &whole
: 然后,
: ...................
--
FROM 111.193.29.*
10楼
|
Dieken
|
2021-01-01 10:13:11
|
展开
也有道理,不知道那个宏是按 dotted pair 解释的,还是有啥其它逻辑,但总之效果确实是一样的,
都是 &rest 的含义。
【 在 littleSram (littleSram) 的大作中提到: 】
: 标 题: Re: 帮忙解释一下 Lisp 定义宏时的参数设定,谢谢!
: 发信站: 水木社区 (Fri Jan 1 08:11:01 2021), 站内
:
: 我认为好像还是吧
: 因为 (1 2) <=> (1 . (2)), 所以当形参是 (x . y) 的时候, x 为 1,y 为 (2)。
: 【 在 Dieken 的大作中提到: 】
: : 那个语法不是 dotted pair,而是 Common Lisp 的 Lambda list 语法,点表示 &rest。
: :
http://clhs.lisp.se/Body/03_dd.htm
: :
:
: --
:
: ※ 来源:·水木社区
http://www.newsmth.net
·[FROM: 114.249.25.*]
--
FROM 111.193.29.*
11楼
|
Dieken
|
2021-01-01 10:14:27
|
展开
实用,而且是 Lisp 社区不可忽视的高峰,哈哈
【 在 littleSram (littleSram) 的大作中提到: 】
: 标 题: Re: 帮忙解释一下 Lisp 定义宏时的参数设定,谢谢!
: 发信站: 水木社区 (Fri Jan 1 08:16:08 2021), 站内
:
: 为啥要看common LISP呢
: 如果要学LISP的话,可以从简单的LISP方言学起来,比如scheme
:
: 【 在 snoopyzhao 的大作中提到: 】
: : 有这么两个common lips 宏的定义:
: : (defmacro destructuring-switch-bind (lambdalist expr . body)
: : (...))
: : ...................
:
: --
:
: ※ 来源:·水木社区
http://www.newsmth.net
·[FROM: 114.249.25.*]
--
FROM 111.193.29.*
13楼
|
Dieken
|
2021-01-01 10:29:49
|
展开
Guy Steele 有个著名的演讲 Growing a language:
https://www.youtube.com/watch?v=_ahvzDzKdB0
语言设计者不应该去设计一个小语言,因为它太小了做大事会很累,也不应该去设计一个大语言,因为它太难一次设计对。 语言设计者应该去设计一种 pattern,能让语言顺利的被用户扩展,而且扩展的跟原始就这么设计似的,天衣无缝。
Lisp 有这个 pattern,就是 macro,问题是这个 macro 用起来有点难,哈哈
【 在 littleSram (littleSram) 的大作中提到: 】
: 好吧,common LISP我没学过,其实我觉得如果只是了解的LISP的话,可以看看the little schemer 之类的书。
: clojure我倒是买过书学过
--
FROM 111.193.29.*
17楼
|
Dieken
|
2021-01-02 14:05:29
|
展开
一票 Lisp 显然是了,Smalltalk 和 Rebol 也是。
Ruby 接近,C++ 也有点像(支持操作符重载,模版很强大)。
nim 也可以算,Rust 受限了点,Go和 Java显然不满足。
【 在 mars00 的大作中提到: 】
: 符合这个标准的现存语言有?
:
--
FROM 61.148.245.*
1/1
|
转到
选择讨论区
首页
|
分区
|
热推
BYR-Team
©
2010.
KBS Dev-Team
©
2011
登录完整版