小编Mat*_*ick的帖子

解释工人的组合器

什么是组合器?

它是"没有自由变量的函数或定义"(在SO上定义)?

或者如何:根据John Hughes在他着名的关于Arrows的论文中,"组合器是一个从程序片段构建程序片段的函数",这是有利的,因为"......使用组合器的程序员构建了大部分所需的自动编程,而不是手工编写每个细节".他接着说,mapfilter是这样的组合子的两个常见的例子.

一些符合第一个定义的组合器:

一些符合第二个定义的组合器:

  • 地图
  • 过滤
  • 折叠/减少(推测)
  • 任何>> =,撰写,fmap ?????

我对第一个定义不感兴趣 - 那些不能帮我写一个真正的程序(如果你说服我错了,那就是+1). 请帮我理解第二个定义.我认为map,filter和reduce非常有用:它们允许我在更高级别编程 - 更少的错误,更短更清晰的代码.以下是关于组合器的一些具体问题:

  1. 有哪些组合器的例子,例如map,filter?
  2. 编程语言经常实现哪些组合器?
  3. 组合器如何帮助我设计更好的API?
  4. 如何设计有效的组合器?
  5. 什么是类似于非功能语言(比如Java)的组合器,或者这些语言用什么来代替组合器?

更新

感谢@CA McCann,我现在对组合器有了更好的理解.但有一个问题对我来说仍然是一个棘手的问题:

用大量使用组合器写的函数程序和没有写的函数程序有什么区别?

我怀疑答案是组合器重型版本更短,更清晰,更通用,但如果可能的话,我希望进行更深入的讨论.

我也在寻找更多关于复杂组合器的例子和解释(比复杂的组合fold语言).

functional-programming combinators

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

为什么用函数式语言编写编译器更容易?

我一直在考虑这个问题,但实际上无法在Google上找到答案以及Stackoverflow上的类似问题.如果有重复,我很抱歉.

许多人似乎都说,在函数式语言(如OCaml和Haskell)中编写编译器和其他语言工具比使用命令式语言编写它们更有效,更容易.

这是真的?如果是这样的话 - 为什么用函数式语言而不是像C这样的命令式语言来编写它们是如此高效和容易?另外 - 在一些函数式语言中,语言工具不是像C这样的低级语言吗?

compiler-construction ocaml haskell functional-programming

85
推荐指数
6
解决办法
1万
查看次数

什么是char的默认值?

char c = '\u0000';
Run Code Online (Sandbox Code Playgroud)

当我打印c时,它在命令行窗口中显示"a".

那么char类型字段的默认值是什么?

有人说'\ u0000'在unicode中表示无效; 是对的吗?

java char

78
推荐指数
4
解决办法
14万
查看次数

为什么我应该使用jQuery而不是GWT?

我需要在jQuery和GWT之间为我的新项目做出决定.

我有一段时间没用JavaScript编程,过去几天我一直在研究GWT.它看起来非常棒,为不同的浏览器和所有浏览器生成所有不同的JS,但是:

  • 使用jQuery开发Java需要花费更多时间(至少对于这个项目而言)
  • 文档很差(例如,我应该如何知道在设计页面时我应该使用哪些元素? - 这里没有足够的文档)

我一直在为我的大多数项目使用jQuery而且非常好.

我想说服客户端jQuery更适合这个项目,我需要更多的参数来支持这个.

javascript jquery gwt

75
推荐指数
6
解决办法
4万
查看次数

使python用户定义的类可排序,可清除

在python中使用户定义的类可排序和/或可清除时,需要覆盖/实现哪些方法?

有什么值得注意的?

我输入dir({})我的解释器以获取内置dicts的方法列表.其中,我假设我需要实现一些子集

['__cmp__', '__eq__', '__ge__', '__gt__', '__hash__', '__le__', '__lt__', '__ne__']
Run Code Online (Sandbox Code Playgroud)

与Python2相比,Python3必须实现哪些方法有区别?

python sorting hash class magic-methods

70
推荐指数
3
解决办法
4万
查看次数

Node.js"require"函数和参数

当我做:

lib = require('lib.js')(app)
Run Code Online (Sandbox Code Playgroud)

app实际歌厅通过呢?

在lib.js中:

exports = module.exports = function(app){}
Run Code Online (Sandbox Code Playgroud)

似乎没有,因为当我尝试做的不仅仅是(app),而是做:

lib = require('lib.js')(app, param2)
Run Code Online (Sandbox Code Playgroud)

和:

exports = module.exports = function(app, param2){}
Run Code Online (Sandbox Code Playgroud)

我没有params2.

我试图通过以下方式进行调试:

params = {}
params.app = app
params.param2 = "test"

lib = require("lib.js")(params)
Run Code Online (Sandbox Code Playgroud)

但在lib.js中,当我尝试JSON.stringify收到此错误时:

"DEBUG: TypeError: Converting circular structure to JSON"
Run Code Online (Sandbox Code Playgroud)

javascript require node.js

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

为什么easy_install找不到MySQLdb?

这是我试过的:

$ easy_install-2.6 -d /home/user/lib/python2.6 MySQLdb  
Searching for MySQLdb  
Reading http://pypi.python.org/simple/MySQLdb/  
Couldn't find index page for 'MySQLdb' (maybe misspelled?)  
Scanning index of all packages (this may take a while)  
Reading http://pypi.python.org/simple/  
No local packages or download links found for MySQLdb  
error: Could not find suitable distribution for Requirement.parse('MySQLdb')  
Run Code Online (Sandbox Code Playgroud)

python mysql easy-install

66
推荐指数
3
解决办法
6万
查看次数

什么是skolems?

Eeek!GHCi在我的代码中发现了Skolems!

...
Couldn't match type `k0' with `b'
  because type variable `b' would escape its scope
This (rigid, skolem) type variable is bound by
  the type signature for
    groupBy :: Ord b => (a -> b) -> Set a -> Set (b, [a])
The following variables have types that mention k0
...
Run Code Online (Sandbox Code Playgroud)

这些是什么?他们对我的计划有什么要求?为什么他们试图逃脱(忘恩负义的小战士)?

haskell types type-variables

66
推荐指数
3
解决办法
5495
查看次数

65
推荐指数
3
解决办法
1万
查看次数

如何在Python中获取__main__模块的文件名?

假设我有两个模块:

a.py:

import b
print __name__, __file__
Run Code Online (Sandbox Code Playgroud)

b.py:

print __name__, __file__
Run Code Online (Sandbox Code Playgroud)

我运行"a.py"文件.这打印:

b        C:\path\to\code\b.py
__main__ C:\path\to\code\a.py
Run Code Online (Sandbox Code Playgroud)

问题:如何__main__从"b.py"库中获取模块的路径(在本例中为"a.py")?

python python-module

63
推荐指数
4
解决办法
4万
查看次数