小编Jay*_*Jay的帖子

158
推荐指数
6
解决办法
8万
查看次数

为什么eval邪恶呢?

我知道Lisp和Scheme程序员通常会说eval除非必要,否则应该避免.我已经看到了几种编程语言的相同建议,但我还没有看到一个反对使用的明确论据列表eval.我在哪里可以找到使用中潜在问题的说明eval

例如,我知道GOTO程序编程中的问题(使程序难以理解且难以维护,难以找到安全问题等),但我从未见过反对的论点eval.

有趣的GOTO是,相反的论点应该对延续有效,但我看到Schemers,例如,不会说延续是"邪恶的" - 你在使用时应该小心.他们更倾向于使用代码而eval不是代码使用continuation(据我所知 - 我可能是错的).

lisp scheme eval clojure common-lisp

141
推荐指数
8
解决办法
1万
查看次数

Haskell:不能使用"map putStrLn"?

我有一个字符串列表,并试过这个:

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)则打印和递归).但是,这将是很多简单的只使用地图...

谢谢!

io monads haskell

53
推荐指数
2
解决办法
2万
查看次数

在R中将十进制转换为二进制?

"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)

r

35
推荐指数
7
解决办法
3万
查看次数

什么时候出现宏(用户定义的代码转换)?

我读过McCarthy 1960年关于LISP的论文,没有发现任何与用户定义的宏或正常的订单评估相似的内容.我想知道宏首次出现在编程语言历史中(以及Lisp历史中):

  • 什么时候首先描述(理论上)用户定义的代码转换(在解释或编译之前)?
  • 第一个使用类似Lisp的宏的编程语言实现是什么("Lisp-like"是指"使用可读的图灵完整语言进行代码转换")?(包括非Lisps - 例如Forth已经很老了,但我不确定第一个Forth实现是否已经"IMMEDIATE")
  • 其中哪一个是第一个高级编程语言(排除汇编语言......)
  • 拥有宏的第一个Lisp方言是什么?

谢谢!

lisp macros scheme history racket

27
推荐指数
3
解决办法
1742
查看次数

从Common Lisp调用C++(而不是C)?

我想知道是否有某种方法可以从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函数编写包装器,但不是相反 - 这是真的吗?

无论如何......有没有办法做到这一点?

谢谢!

c c++ common-lisp

13
推荐指数
4
解决办法
6754
查看次数

在Clojure,Haskell(和其他语言)中使用哪些算法用于STM?

据我所知,实现软件事务内存有几种不同的算法(这是一个非常活跃的研究领域).我在哪里可以找到(不必深入研究源代码)在不同语言和库中使用,特别是在Clojure和Haskell(GHC)中?

concurrency haskell transactional-memory clojure stm

13
推荐指数
3
解决办法
1331
查看次数

如何在支持演员模型的语言中"实现"?

Gul Agha在其技术报告"Actors:分布式系统中的并发计算模型"中很好地描述了演员模型.

在页49,他解释了"成为"命令:

become <expression>
Run Code Online (Sandbox Code Playgroud)

在调用"成为X"之后,演员将所有消息转发到另一个演员的邮箱(X).

但是,我不确定如何在Erlang和Scala等语言中实现它(它实现了它).我需要手动编码吗?效率怎么样?Agha使用消息传递显示堆栈的实现.每次执行弹出或推送时,都会向某个actor添加一个转发链接......经过数十万次操作后,我希望这样的实现花费太多时间转发消息而不做实际工作,除非一些引擎盖下进行了很好的优化.

所以我的问题是:如何在典型的演员语言中实现转发(或"成为"),如Erlang,Scala(以及其他语言的库)?

concurrency erlang scala actor

12
推荐指数
2
解决办法
855
查看次数

如何在Pandoc生成的HTML中包含元标记?

我正在使用Pandoc来编写网站的内容.如何在文档中包含元标记(特别是描述和关键字标记),而不更改传递给Pandoc的命令行参数?

我的意思是,我可以在文档文本中以某种方式包含元标记吗?我不想传递命令行选项,因为有几个不同的页面,有不同的关键字,我想从Emacs中发送到Pandoc,并且自定义每个页面都是个问题.

pandoc

12
推荐指数
2
解决办法
4080
查看次数

Haskell中的稀疏数组?

是否有任何标准或"最常见"的方式来表示Haskell中的多维稀疏数组(不会过多牺牲性能)?

例如,像C++中的map <int,map <int,MyClass >>那样的东西.我用Google搜索,发现只是一些旧的学术论文和其他人也要求这样做.

谢谢!

arrays haskell data-structures

10
推荐指数
3
解决办法
2228
查看次数