gpt4 book ai didi

javascript - 一个叫做 struggle 的高阶函数怎么样?

转载 作者:行者123 更新时间:2023-11-29 16:05:10 25 4
gpt4 key购买 nike

想象一下,您的妻子让您去买一些坎皮恩花。因为它是一种稀有的花,你不确定你是否可以在隔壁的花店找到它。所以你必须检查镇上的每一家花店,并向他们索要野营花。但事实是有些花店有公用电话,你可以打电话问问。其中有些有网站,有些您必须走进去。

因此,您从最简单的可能解决方案开始您的探索。关键是你要以独特的方式检查每一家花店,比如你和他们交谈的方式,或者你走的路才能找到那个人。如果我们以代码的方式讨论,这些是几个功能;每个商店一个功能。

因此在编程世界中,您必须为 10 种可能的解决方案编写 10 种不同的查询函数。下一步是逐一尝试列表中的每一种可能的解决方案,一旦你得到肯定的答案/回复/返回,你将停止探索并提出答案。

我认为这是一个例行程序,最有可能像过滤器、映射和缩减器,我相信我是对的。

那么有这样的东西怎么样?

在二郎中:

-export([struggle/2]).

struggle(Input, Solutions) ->
struggle(Input, Solutions, false).

struggle(_, [], false) ->
false;
struggle(Input, [Solution|OtherSolutions], false) ->
struggle(Input, OtherSolutions, Solution(Input));
struggle(_, _, Answer) ->
Answer.

或在 javascript 中:

function struggle(input, solutions)
{
let strgl = (input, solutions, acc) => {
if (solutions.length === 0 && acc === undefined) return undefined;
if (acc === undefined) return strgl(input, solutions.slice(1), solutions[0](input));
return acc;
};
return strgl(input, solutions, undefined);
}

你不认为它足够通用,可以作为一个内置的高阶函数吗?

PS:代码运行良好,无需修复。问题是,为什么它不是内置函数?

最佳答案

具体问题是什么?

strugle(Input, Solutions) ->
lists:any(fun(X) -> X(Input) end, Solutions).

它是 Erlang 的精髓。或者,如果您希望返回第一个非假值。

strugle(Input, Solutions) ->
any_non_false(fun(X) -> X(Input) end, Solutions).

any_non_false(F, L) ->
try lists:any(fun(X) ->
case F(X) of
false -> false;
Y -> throw({return, Y})
end
end, L)
catch {return, X} -> X end.

关于javascript - 一个叫做 struggle 的高阶函数怎么样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45225573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com