我最近在学习R并且被两个函数混淆了:lapply和do.call.它们似乎与mapLisp中的函数类似.但为什么有两个具有不同名称的函数?为什么R只使用一个叫做的函数map?
教会号码是自然数字作为函数的编码.
(\ f x ? (f x)) -- church number 1
(\ f x ? (f (f (f x)))) -- church number 3
(\ f x ? (f (f (f (f x))))) -- church number 4
Run Code Online (Sandbox Code Playgroud)
整齐地说,你可以通过应用它们来取代2个教会数字.也就是说,如果你申请4到2,你就得到教会号码16,或者2^4.显然,这完全是不切实际的.教会数字需要一定数量的记忆,而且非常非常慢.像10^10GHCI快速正确回答的类似计算的东西需要很长时间,无论如何都无法适应你计算机上的内存.
我最近一直在尝试最佳的λ评估员.在我的测试中,我不小心在我的最佳λ计算器上键入了以下内容:
10 ^ 10 % 13
Run Code Online (Sandbox Code Playgroud)
它应该是乘法,而不是取幂.在我绝望地移动我的手指中止永久运行的程序之前,它回答了我的要求:
3
{ iterations: 11523, applications: 5748, used_memory: 27729 }
real 0m0.104s
user 0m0.086s
sys 0m0.019s
Run Code Online (Sandbox Code Playgroud)
随着我的"错误警报"闪烁,我去谷歌并确认了10^10%13 == 3.但是λ计算器不应该找到那个结果,它几乎不能存储10 ^ 10.对于科学,我开始强调它.这立刻回答我20^20%13 == 3,50^50%13 == …
algorithm haskell functional-programming lambda-calculus modular-arithmetic
我不明白"提升"是什么.在了解"电梯"是什么之前我应该先了解单子吗?(我对monads也完全无知:)或者有人可以用简单的词语向我解释一下吗?
这非常难以理解,但我正在尝试学习/理解python中的函数式编程.以下代码:
foos = [1.0,2.0,3.0,4.0,5.0]
bars = [1,2,3]
def maptest(foo, bar):
print foo, bar
map(maptest, foos, bars)
Run Code Online (Sandbox Code Playgroud)
生产:
1.0 1
2.0 2
3.0 3
4.0 None
5.0 None
Run Code Online (Sandbox Code Playgroud)
问:有没有办法在python中使用map或任何其他功能工具来生成以下没有循环等.
1.0 [1,2,3]
2.0 [1,2,3]
3.0 [1,2,3]
4.0 [1,2,3]
5.0 [1,2,3]
Run Code Online (Sandbox Code Playgroud)
正如附注所示,如果foo和bar之间存在依赖关系,实现将如何变化.例如
foos = [1.0,2.0,3.0,4.0,5.0]
bars = [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)
并打印:
1.0 [2,3,4,5]
2.0 [1,3,4,5]
3.0 [1,2,4,5]
...
Run Code Online (Sandbox Code Playgroud)
PS:我知道如何使用if,循环和/或生成器天真地做,但我想学习如何使用功能工具实现相同的功能.是仅仅在maptest中添加if语句或在maptest内部将另一个过滤器映射应用于条形图的情况?
我最近一直在学习函数式编程(特别是Haskell,但我也经历过关于Lisp和Erlang的教程).虽然我发现这些概念非常具有启发性,但我仍然没有看到"无副作用"概念的实际方面.它有什么实际优势?我试图在功能思维中思考,但是有些情况看起来过于复杂而没有能够以简单的方式保存状态(我不认为Haskell的monad'容易').
是否值得继续深入学习Haskell(或其他纯函数式语言)?功能性或无状态编程实际上是否比程序性更高效?我以后可能继续使用Haskell或其他功能语言,还是应该仅仅为了理解而学习它?
我更关心性能而不是生产力.所以我主要问的是我是否会在函数式语言中比在程序/面向对象/其他方面更高效.
这是官方文档所说的
updateIn(keyPath: Array<any>, updater: (value: any) => any): List<T>
updateIn(keyPath: Array<any>, notSetValue: any, updater: (value: any) => any): List<T>
updateIn(keyPath: Iterable<any, any>, updater: (value: any) => any): List<T>
updateIn(keyPath: Iterable<any, any>, notSetValue: any, updater: (value: any) => any): List<T>
Run Code Online (Sandbox Code Playgroud)
普通的Web开发人员(非功能程序员)无法理解这一点!
我非常简单(对于非功能性方法)的情况.
var arr = [];
arr.push({id: 1, name: "first", count: 2});
arr.push({id: 2, name: "second", count: 1});
arr.push({id: 3, name: "third", count: 2});
arr.push({id: 4, name: "fourth", count: 1});
var list = Immutable.List.of(arr);
Run Code Online (Sandbox Code Playgroud)
如何更新list名称为third的元素的计数设置为 …
我真的觉得我应该学习Lisp,并且有很多很好的资源可以帮助我做到这一点.
我不会被复杂的语法所拖延,但在"传统的商业编程"中我会找到使用它而不是过程语言的地方.
是否有一个用Lisp编写的商业杀手应用程序?
有没有办法在Swift 中map或reduce在Swift中获取数组的索引?我正在寻找像each_with_indexRuby 这样的东西.
func lunhCheck(number : String) -> Bool
{
var odd = true;
return reverse(number).map { String($0).toInt()! }.reduce(0) {
odd = !odd
return $0 + (odd ? ($1 == 9 ? 9 : ($1 * 2) % 9) : $1)
} % 10 == 0
}
lunhCheck("49927398716")
lunhCheck("49927398717")
Run Code Online (Sandbox Code Playgroud)
我想摆脱上面的odd变量.
我遇到了这个术语Hindley-Milner,我不确定是否掌握了它的含义.
我看过以下帖子:
但是维基百科中没有单一的条目,通常会给我一个简明的解释.
注意 - 现在添加了一个
它是什么?
哪些语言和工具实现或使用它?
你能提供一个简明的答案吗?
haskell ×2
algorithm ×1
dictionary ×1
immutability ×1
immutable.js ×1
inference ×1
javascript ×1
lisp ×1
python ×1
r ×1
state ×1
swift ×1
terminology ×1
types ×1