我理解LET和LET*之间的区别(并行与顺序绑定),作为理论问题,它非常有意义.但有没有你真的需要LET的情况?在我最近看过的所有Lisp代码中,您可以用LET*替换每个LET而不做任何更改.
编辑:好的,我理解为什么有些人发明了LET*,大概是作为一个宏,回归的时候.我的问题是,鉴于LET*存在,是否有理由让LET留在身边?您是否编写了任何实际的Lisp代码,其中LET*不能像普通的LET那样工作?
我不买效率论证.首先,认识到LET*可以编译成像LET一样高效的情况,这似乎并不难.其次,CL规范中有很多东西似乎根本就不是围绕效率而设计的.(当你最后一次看到带有类型声明的循环时?那些很难弄清楚我从未见过它们使用过.)在20世纪80年代后期的Dick Gabriel基准测试之前,CL 非常缓慢.
看起来这是另一种向后兼容的情况:明智的是,没有人愿意冒险破坏像LET那样基本的东西.这是我的预感,但是听到没有人有一个我丢失的愚蠢简单的案例令人欣慰,因为LET比LET*更容易让事情变得简单.
我有一个像"foo%20bar"的字符串,我想要"foo bar".
我知道必须有一个内置函数来解码Emacs Lisp中的URL编码字符串(查询字符串),但对于我的生活,我今天无法在我的lisp /文件夹或google中找到它.
有谁记得它叫什么?
我想在C#中将int格式化为货币,但没有分数.例如,100000应为"$ 100,000",而不是"$ 100,000.00"(100000.ToString("C")给出).
我知道我可以使用100000.ToString("$#,0")执行此操作,但这是$ -specific.有没有办法用货币("C")格式化器?
任何Common Lisp(内置)函数是否返回超过2个值?我知道许多人返回2,但我想不到一个返回3.
(我在这里看到关于返回超过2个值的评论,并试图想到CL做到这一点的情况,但不能.)
是否有一种简单的方法可以从C#中的字符串列表中仅获取唯一值?我的google-fu今天失败了.
(我知道我可以将它们放在另一个结构中并再次将它们拉出来.我正在寻找愚蠢的容易,就像Ruby的.uniq方法一样.C#还有其他所有的血腥,所以我可能只是使用了错误的同义词.)
具体来说,这是来自Linq,所以如果Linq有一种内置方式来选择唯一的字符串,那就更酷了.
这是一些C#代码:
var sb = new StringBuilder();
var w = XmlWriter.Create(sb);
w.WriteStartElement("hello");
w.WriteAttributeString("target", "world ' \" !");
w.WriteEndElement();
w.Flush();
// then look at sb.ToString()
Run Code Online (Sandbox Code Playgroud)
我得到的字符串看起来像:
<?xml version="1.0" encoding="utf-16"?><hello target="world ' " !" />
Run Code Online (Sandbox Code Playgroud)
它只是逃避双引号,而不是单引号.但是XmlWriter.WriteAttributeString(String,String)的文档说:
如果属性值包括双引号或单引号,则将它们替换为" 和 分别.
我需要设置一些标志,以使其按照文档所说的那样做吗?