Common Lisp中"set","setq"和"setf"有什么区别?
我知道Lisp和Scheme程序员通常会说eval
除非必要,否则应该避免.我已经看到了几种编程语言的相同建议,但我还没有看到一个反对使用的明确论据列表eval
.我在哪里可以找到使用中潜在问题的说明eval
?
例如,我知道GOTO
程序编程中的问题(使程序难以理解且难以维护,难以找到安全问题等),但我从未见过反对的论点eval
.
有趣的GOTO
是,相反的论点应该对延续有效,但我看到Schemers,例如,不会说延续是"邪恶的" - 你在使用时应该小心.他们更倾向于使用代码而eval
不是代码使用continuation(据我所知 - 我可能是错的).
我有一个字符串列表,并试过这个:
ls = [ "banana", "mango", "orange" ]
main = do
map PutStrLn list_of_strings
Run Code Online (Sandbox Code Playgroud)
这不起作用,我不明白为什么.
ghc print-list.hs
print-list.hs:3:0:
Couldn't match expected type `IO t' against inferred type `[IO ()]'
In the expression: main
When checking the type of the function `main'
Run Code Online (Sandbox Code Playgroud)
任何提示?我想它与map返回列表而不是值有关,但我没有找到一种简单的方法来解决这个问题.
现在,我知道打印字符串列表的唯一方法是编写一个函数来迭代列表,打印每个元素(如果列表是[a]则打印,但如果是(a:b)则打印和递归).但是,这将是很多简单的只使用地图...
谢谢!
"0000000000000101"
在R 中将数字转换为基数2(在字符串中,例如5将被转换为)的最简单方法是什么?有intToBits
,但它返回一个字符串向量而不是字符串:
> intToBits(12)
[1] 00 00 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[26] 00 00 00 00 00 00 00
Run Code Online (Sandbox Code Playgroud)
我尝试了其他一些功能,但没有成功:
> toString(intToBits(12))
[1] "00, 00, 01, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00"
Run Code Online (Sandbox Code Playgroud) 我读过McCarthy 1960年关于LISP的论文,没有发现任何与用户定义的宏或正常的订单评估相似的内容.我想知道宏首次出现在编程语言历史中(以及Lisp历史中):
谢谢!
我想知道是否有某种方法可以从Common Lisp调用C++代码(最好是可移植的,如果没有,最好是在SBCL中,如果没有,那么,然后是Clozure,CLisp或ECL).
C++将在内部循环中调用以进行数值计算,因此如果调用速度很快就会很好.
CFFI似乎不支持这个:
"这个概念可以推广到其他语言;在撰写本文时,只有CFFI的C支持相当完整,但正在开发C++支持."
(手册第4章)
SBCL的手册也没有提到C++; 它实际上说
本章描述了SBCL与C程序和库的接口(并且,因为C接口是Unix世界的一种 通用语言,一般来说是其他程序和库.)
C++代码使用OO和运算符重载,所以它确实需要用g ++编译.
据我所知,我可以拥有一个C++ main()函数并为C函数编写包装器,但不是相反 - 这是真的吗?
无论如何......有没有办法做到这一点?
谢谢!
据我所知,实现软件事务内存有几种不同的算法(这是一个非常活跃的研究领域).我在哪里可以找到(不必深入研究源代码)在不同语言和库中使用,特别是在Clojure和Haskell(GHC)中?
Gul Agha在其技术报告"Actors:分布式系统中的并发计算模型"中很好地描述了演员模型.
在页49,他解释了"成为"命令:
become <expression>
Run Code Online (Sandbox Code Playgroud)
在调用"成为X"之后,演员将所有消息转发到另一个演员的邮箱(X).
但是,我不确定如何在Erlang和Scala等语言中实现它(它实现了它).我需要手动编码吗?效率怎么样?Agha使用消息传递显示堆栈的实现.每次执行弹出或推送时,都会向某个actor添加一个转发链接......经过数十万次操作后,我希望这样的实现花费太多时间转发消息而不做实际工作,除非一些引擎盖下进行了很好的优化.
所以我的问题是:如何在典型的演员语言中实现转发(或"成为"),如Erlang,Scala(以及其他语言的库)?
我正在使用Pandoc来编写网站的内容.如何在文档中包含元标记(特别是描述和关键字标记),而不更改传递给Pandoc的命令行参数?
我的意思是,我可以在文档文本中以某种方式包含元标记吗?我不想传递命令行选项,因为有几个不同的页面,有不同的关键字,我想从Emacs中发送到Pandoc,并且自定义每个页面都是个问题.
是否有任何标准或"最常见"的方式来表示Haskell中的多维稀疏数组(不会过多牺牲性能)?
例如,像C++中的map <int,map <int,MyClass >>那样的东西.我用Google搜索,发现只是一些旧的学术论文和其他人也要求这样做.
谢谢!