+15
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
#include <iostream>
#include <functional>
template<class Container, class F, class A>
auto accumulate(Container c, F f, A acc) -> A
{
auto id = [](const A& a) -> const A& {return a;};
typedef decltype(std::begin(c)) Iterator;
const std::function<A(const Iterator& lst, const std::function<A(const A&)>&)> doIt =
[&](const Iterator& lst, const std::function<A(const A&)>& cont) -> A
{
if(lst==c.end())
return cont(acc);
else
{
auto conter=[&](const A& acc) -> A {return cont(f(*lst, acc));};
return doIt(lst+1, conter);
}
};
return doIt(std::begin(c), id);
}
int main() {
std::cout<<accumulate({1,2,3,4}, std::plus<int>(), 0);
return 0;
}
Похоже написал какой-то монадолог.
http://ideone.com/y4Dm9z
Пример использования accumulate сам накатал.
Я побаловался с этим примером, чтобы разобраться и GCC ожидаемо упал:
http://ideone.com/XWfuoP
Я убежден, что эта функция должна была выглядеть как-то так:
template<class Container, class F>
accumulate(const Container& c, const F& f=std::plus<decltype(*(std::begin(c)))>(), const decltype(*(std::begin(c))) acc=decltype(*(std::begin(c)))()) -> decltype(*(std::begin(c)))
{
return std::accumulate(c.begin(), c.end(), acc, f);
}
//Вызов этой функции:
accumulate({1,2,3,4});
Ну и я погуглил на тему этого говнокода и нашел на функциональном языке похожий:
let fold_right func acc list =
let rec loop list cont = //сюда мы передаем текущую функцию континуации
match list with
|[] -> cont acc //а вот и наше ключевое вычисление.
|head::tail -> loop tail (fun racc -> cont (func head racc))
loop list (fun x -> x)
LispGovno,
23 Ноября 2012
+136
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
private BusinessSocialProfile GetSocialProfileLink(string searchProvider, string searchKey)
{
var link = new BusinessSocialProfile { Name = searchProvider, Url = "#" };
if (searchProvider.Contains("city", StringComparison.InvariantCultureIgnoreCase))
{
link.Url = cityLink;
link.Logo = "/citysearch.png";
link.ImageStyle = "margin-top:-8px";
}
else if (searchProvider.Contains("google", StringComparison.InvariantCultureIgnoreCase))
{
link.Url = googleLink;
link.Logo = "/google.png";
}
else if (searchProvider.Contains("yelp", StringComparison.InvariantCultureIgnoreCase))
{
link.Url = yelpLink;
link.Logo = "/yelp.png";
link.ImageStyle = "margin-top:-8px";
}
else if (searchProvider.Contains("manta", StringComparison.InvariantCultureIgnoreCase))
{
link.Url = mantaLink;
link.Logo = "/manta.png";
}
else if (searchProvider.Contains("patch", StringComparison.InvariantCultureIgnoreCase))
{
link.Url = patchLink;
link.Logo = "/patch.png";
}
else
{
link.Url = "#";
link.Logo = string.Empty;
link.Name = string.Empty;
}
return link;
}
уже до боли известный девелопер ;) а для чего еще нужна бизнесс-логика...?
mangyst,
16 Ноября 2012
+71
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
class ........... {
BigDecimal t;
...
public boolean t_is_zero(){
BigDecimal zero = new BigDecimal(0);
if(this.t == zero)
return true;
else
return false;
}
...
}
для операции сравнения была создана новая переменная как эквивалент )
azv,
12 Ноября 2012
+132
- 1
- 2
- 3
- 4
enum
{
MaxStringLen = 1024
};
Офигенный метод объявления констант!
glook,
13 Августа 2012
+184
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
__declspec (naked) INT16U getWordOfCPUFlags(void)
{
_asm
{
pushf;
xor eax, eax;
pop ax;
ret;
}
}
void setWordOfCPUFlags(const INT16U WordOfCPUFlag)
{
_asm
{
push WordOfCPUFlag;
popf;
}
}
bool getCPUTraceFlag(void)
{
return 0 != (getWordOfCPUFlags() & 0x100);
}
void setCPUTraceFlag(const bool CPUTraceFlag)
{
const INT16U MaskOfTraceFlag=((INT16U)CPUTraceFlag)<<8;
//setWordOfCPUFlags( (getWordOfCPUFlags() and ~MaskOfTraceFlag) ^ MaskOfTraceFlag);
if(CPUTraceFlag)
setWordOfCPUFlags( getWordOfCPUFlags() | MaskOfTraceFlag);
else
setWordOfCPUFlags( getWordOfCPUFlags() & ~MaskOfTraceFlag);
}
Видимо автору кода строка 29 показалась слишком сложной.
HaskellGovno,
26 Июня 2012
−119
- 1
- 2
- 3
- 4
- 5
- 6
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
.....
ГДЕ
.....
И ОсновныеНачисления.Авторасчет = Истина
И ОсновныеНачисления.Авторасчет = Ложь"
Выбрать обязательно различные! :)
mrbus,
29 Мая 2012
−165
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
/**
* This is a really fast way to check for NaN; see the spec of NaN
* on why this works; this check can yield false only for a Number
* since it's the only one capable of having NaN as a value.
*/
if (d != d) {
throw new Error("value can't be NaN!");
}
kyzi007,
15 Мая 2012
+162
- 1
- 2
- 3
- 4
function cut($text){
$full_text = explode("<cut/>",$text);
return $full_text;
}
Функция обрезания текста по тегу <cut/>
Skitch,
07 Января 2012
+73
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
public boolean alwaysAllowed(String player) {
return getServer().getPlayer(player).hasPermission("over9000homes.alwaysAllowed");
}
public boolean remoteAccess(String player) {
return getServer().getPlayer(player).hasPermission("over9000homes.remote");
}
public boolean canUse(String player) {
return getServer().getPlayer(player).hasPermission("over9000homes.use");
}
public boolean canInvite(String player) {
return getServer().getPlayer(player).hasPermission("over9000homes.caninvite");
}
public boolean infiniteHomes(String player) {
return getServer().getPlayer(player).hasPermission("over9000homes.infinite");
}
public boolean noWarmup(String player) {
return getServer().getPlayer(player).hasPermission("over9000homes.nowarmup");
}
public boolean noCooldown(String player) {
return getServer().getPlayer(player).hasPermission("over9000homes.nocooldown");
}
public boolean freeSetHome(String player) {
return getServer().getPlayer(player).hasPermission("over9000homes.freesethome");
}
public boolean freeHome(String player) {
return getServer().getPlayer(player).hasPermission("over9000homes.freehome");
}
Всё тот же Bukkit проект.
Uhehesh,
12 Октября 2011