晚间!
我需要在Scheme中编写一个reduce函数,它就像Python中的内置reduce函数一样.在Scheme中编写reduce函数很容易:
(define (reduce fn lis identity)
(if (null? lis)
identity
(fn (car lis)
(reduce fn (cdr lis) identity))))
Run Code Online (Sandbox Code Playgroud)
但是,此代码与Python reduce不同,后者仅使用两个参数(函数和要减少的项列表).
任何人都可以帮我写一个这样工作的Scheme函数吗?
(>(reduce*'(2 4 5 5))=> 200,是我们教授的例子.)
非常感谢,伙计和女孩们.你是如此有帮助<3
ETA:对Levien先生和Jester-Young先生,非常感谢你.您提供了大量的信息,以帮助我自己解决问题.*拥抱
我正在计算项目在枚举中出现的次数.
irb(main):003:0> (1..3).reduce(0) {|sum, p| sum += 1 if p == 1}
=> nil
irb(main):004:0> (1..3).find_all{|p| p == 1}.length
=> 1
Run Code Online (Sandbox Code Playgroud)
reduce方法似乎应该与find_all方法具有相同的行为.为什么它会返回nil而不是1?
irb(main):023:0> (1..3).reduce(0) {|sum, p| sum += 1 if p == 2}
NoMethodError: undefined method `+' for nil:NilClass
from (irb):23:in `block in irb_binding'
from (irb):23:in `each'
from (irb):23:in `reduce'
from (irb):23
from /usr/bin/irb:12:in `<main>'
Run Code Online (Sandbox Code Playgroud)
在第一次迭代中出现了问题.可以减少不使用这种方式吗?
我用阵列缩减功能测试了几个场景.
[1,2].reduce(function(initial , val){
return initial+val;
} ,1)
// returns 4 as expected
[1,2].reduce(function(initial , val){
return initial+val;
})
// returns 3
Run Code Online (Sandbox Code Playgroud)
但明确传递undefined为初始值
[1,2].reduce(function(initial , val){
return initial+val;
}, undefined)
// returns NaN.
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎很不寻常.
我的目标是找到一个数组中的"总数".
例如,这个数组中的每个对象"arrayOfBikes"都有一个"free"属性,我想找到"free"的总值.
我正在努力减少我编写的代码量.
是否有可能编写一个函数,它接受一个数组和一个项目来计算(免费或自行车)我一直试图在下面实现它但我遇到了错误"getTotalNumberOfBikes()"
var arrayOfBikes = [
{name: "blackhall", lat: 53.3488, lng: -6.281637, free: 22, bikes: 8},
{name: "mbrown", lat: 53.341645, lng: -6.29719, free: 14, bikes: 8},
{name: "grant street", lat: 53.334123, lng: -6.265436, free: 3, bikes: 27},
{name: "gratstreet", lat: 53.339629, lng: -6.243778, free: 19, bikes: 4},
{name: "hardstreet", lat: 53.355473, lng: -6.264423, free: 14, bikes: 2}
];
function getTotalNumberOfFreeBikes(_array){
let arrayOfFreeBikes = [];
_array.forEach(function(element){
arrayOfFreeBikes.push(element.free);
});
return arrayOfFreeBikes.reduce(function(_previousValue, …Run Code Online (Sandbox Code Playgroud) 我是Erlang的初学者,我正在尝试根据Reduce函数实现Map函数.但是,我无法想象你怎么做..我到目前为止尝试过这个:
reduce(_, Acc, []) -> Acc;
reduce(Fn,Acc,[Hd|Tl]) -> reduce(Fn,Fn(Acc,Hd),Tl).
map(F,[]) -> [];
map(F,[Hd|Tl]) -> [reduce(F,F(Hd),[]) | map(F,Tl)].
Run Code Online (Sandbox Code Playgroud)
但是,我看到这个解决方案有点天真.有什么帮助吗?
我有一个数组:
var data = [0,1,2,3,4,5];
我想拼接成[0,1,2]和[3,4,5],随后通过取平均值所以最终的结果将是:
var dataOptimised = [1,4];
这是我到目前为止发现的:
function chunk (arr, len) {
var chunks = [];
var i = 0;
var n = arr.length;
while (i < n) {
chunks.push(arr.slice(i, i += len)); // gives [[0,1,2] [3,4,5]]
}
return chunks;
};
Run Code Online (Sandbox Code Playgroud)
如何减少它?
谢谢
我试图按日期对单位值求和,并创建一个没有重复日期的新数组。例如,我想计算2015-12-04 00:01:00. 此日期在以下数据中出现了 2 次,其值为5和6,将是:
[{date: '2015-12-04 00:01:00', unit: 11}, ... etc]
Run Code Online (Sandbox Code Playgroud)
我试过,arr = results.map(x => x.unit).reduce((a,c) => a + c)但它只返回一个值,而不是一个数组。
[{date: '2015-12-04 00:01:00', unit: 11}, ... etc]
Run Code Online (Sandbox Code Playgroud)
我正在尝试将一组对象减少为一组唯一值.为此,我试图使用Set作为reduce()操作的累加器.
subscriptions = [
{list_id: 'abc', name: 'nom', subscribed: true},
{list_id: 'abc', name: 'nom', subscribed: true},
{list_id: 'ghi', name: 'nom', subscribed: false}];
return subscriptions.reduce((accumulator, currentValue) => {
if (currentValue.subscribed) {
return accumulator.add(currentValue.list_id);
}
}, new Set());
Run Code Online (Sandbox Code Playgroud)
我的测试报告了以下错误:
TypeError:无法读取未定义的属性"add"
我正在尝试做什么?我是否需要以其他方式做到这一点?
我具有应该运行每个验证程序然后返回包含错误的对象的功能。
一切似乎都可以正常工作,但是数组中的第一个验证器。似乎reduce完全忽略了它。不管我在那放什么验证器,它都会直接转到第二个验证器。
我在这里错过明显的东西吗?
export default values => (
[
validateFullName,
validateServicePresence,
validatePhoneField,
validateOrganizationName,
validateInn,
validateEmailField,
validateManagerEmail,
validateComment,
validateAgreement,
].reduce((currentErrors, validator) => {
const validationResult = validator(values);
return {
...currentErrors,
...validationResult,
};
})
);
Run Code Online (Sandbox Code Playgroud) 我做了一个简单的函数来测试(调用)“n”个参数(函数)并将结果作为数组返回,但我不确定这是否是使用 reduce 的正确方法(检查下面的注释行)。
const sucess = () => true;
const failed = () => false;
const tester = (...args) => {
return [...args].reduce((acc,currentValue) => {
if(typeof acc === 'function') // this is right?
return [acc(),currentValue()]
return [...acc,currentValue()]
});
}
console.log(tester(sucess,failed,failed,sucess));Run Code Online (Sandbox Code Playgroud)
你是什么
reduce ×10
javascript ×7
arrays ×5
ecmascript-6 ×2
dictionary ×1
erlang ×1
function ×1
ruby ×1
scheme ×1
slice ×1
sorting ×1
testing ×1
typescript ×1