我在函数式编程游戏中有点迷失.
我有一个像这样的对象:
const answers = {1: 'first', 2:'second', 3:'third', 4:'fourth'}Run Code Online (Sandbox Code Playgroud)
我想将对象重塑为像这样的对象数组.
const arrayOfAnswers = [{1:'first'}, {2:'second'}, {3:'third'}, {4:'fourth'}]Run Code Online (Sandbox Code Playgroud)
达到此目的的简单解决方案是什么?
如果我错了请纠正我
Scala引入了新的范例,如TypeTheory,Continuations,Monads和其他计算理论.Scala是否正在成为一种理论语言,因为大多数论文,博客都在谈论这一点,而我相对较少看到代码插图......
以下Haskell函数的签名是什么:
fix f = f (fix f)
Run Code Online (Sandbox Code Playgroud)
a)((a-> b) - > a-> b) - > a-> b
b)签名无法合成
c)(a-> a) - > a
谢谢!
我查看过去的讨论,但无法理解为什么任何答案都是正确的.
合用的
<*> :: f (a -> b) -> f a -> f b
单子
(>>=) :: m a -> (a -> m b) -> m b
因此,如果我做对了,那么声称是>>=不能仅仅假设存在而写的<*>
好吧,让我们假设我有<*>.
我想创造>>=.
所以我有f a.
我有f (a -> b).
现在当你看它时,f (a -> b)可以写成(a -> b)(如果某个东西是x,y,z的函数 - 那么它也是x,y的函数).
所以从<*>我们得到的存在(a -> b) -> f a -> f b再次可以写成((a -> b) -> f a) …
假设有一个列表,[("@elBarto", "yo no fui"), ("@krusty", "yo tampoco"), ("@pedro", "tal vez")]
我需要一个函数,该函数从该列表中获取每个元素的第二个值 ["yo no fui", "yo tampoco", "tal vez"]。据我所知,该列表包含元组,因此我可以使用每个元组中的snd。返回应该是一个映射列表,但我不知道该怎么做,也许像每个元组的map snd一样。
假设我有这个对象:
const millionsOfLines = {
windowsVista: 50,
firefox: 9,
google: 2000,
quake3Engine: 0.3,
mySQL: 12
};
Run Code Online (Sandbox Code Playgroud)
我会以同样的方式为数组做,如果我能做的话:
const lessThan10 = millionsOfLines.filter((value, key)=> value < 10);
Run Code Online (Sandbox Code Playgroud)
相反,我必须这样做:
const lessThan10 = {};
Object.keys(millionsOfLines).forEach(key=>{
if (millionsOfLines[key] < 10) {
lessThan10[key] = value;
}
});
Run Code Online (Sandbox Code Playgroud)
多么麻烦.其他函数肯定也可以与数组版本完全相同的方式工作:
const thousandsOfLines = millionsOfLines.map((value, key)=> value * 1000);
const totalLines = millionsOfLines.reduce((total, currValue, currKey)=> total + currValue);
Run Code Online (Sandbox Code Playgroud)
我计划将其与我实际需要输入的内容进行比较,但我无法承受这种痛苦,所以这是留给读者的练习.
那么 - 为什么javascript对象没有map/reduce/filter?
在函数式语言中,函数可以在嵌套函数的参数括号内执行,这对于javascript来说是等效的,这意味着受到Scheme的启发.
f(f(f(f)))
console.log( 1 + 1 )
//2
Run Code Online (Sandbox Code Playgroud)
为什么javascript可以在.log方法参数括号内执行加法?
var list1 = []
console.log(list1.push("a"))
//1
Run Code Online (Sandbox Code Playgroud)
但它不能在.log方法括号内执行push方法?为什么它会返回1?
我是"真正的"Javascript的新手:我知道更多的函数式编程.
看来,在Javascript中,您可以从两个方面获得最佳效果:功能和面向对象编程.
但在Ruby中,您没有第一类函数(函数作为数据类型).
这是否意味着Javascript拥抱两全其美,而Ruby只接受面向对象的编程风格?
我正在尝试创建一个计算二次公式的程序,但事实证明它总是给我一个负数,我找不到原因?
equation::(Double,Double,Double)->Double
equation(x,y,z)=(-y-sqrt(y^2+4*x*z))/(2*x)
Run Code Online (Sandbox Code Playgroud)
有人可以帮帮我吗?
在函数式编程世界中,当我想设计一个API时,我会遇到单词代数api.有人可以请说一下,在设计API的背景下,FP中的代数是什么.
哪些组件构建了代数api?法律,运营等.?
有一个单词原语,究竟是什么原语?请给我看一个例子.
haskell ×5
javascript ×4
scala ×2
applicative ×1
ecmascript-6 ×1
functor ×1
math ×1
methods ×1
monads ×1
oop ×1
ruby ×1