gpt4 book ai didi

f# - Fable 中是否有任何优化 channel 可用?

转载 作者:行者123 更新时间:2023-12-02 07:59:16 28 4
gpt4 key购买 nike

我在 Fable REPL 中写了下面的代码:

open Fable.Core

let inline sqr x = x * x

// Filters out `points` that are more than `radius` away
let inRadius radius points =
points
|> List.filter (fun (x, y) -> sqr x + sqr y <= sqr radius)

输出的 JavaScript 是:

import { filter } from "fable-library/List.js";

export function inRadius(radius, xs) {
return filter(function predicate(tupledArg) {
return tupledArg[0] * tupledArg[0] + tupledArg[1] * tupledArg[1] <= radius * radius;
}, xs);
}

更优化的 JavaScript 是:

import { filter } from "fable-library/List.js";

export function inRadius(radius, xs) {
const radiusSquared = radius * radius;

return filter(function predicate(tupledArg) {
return tupledArg[0] * tupledArg[0] + tupledArg[1] * tupledArg[1] <= radiusSquared;
}, xs);
}

(这只是可能应用的优化的一个示例,还有更多可能性)

在 JavaScript 中,由于缺少类型,很难安全地进行这种优化。但是,在原始 F# 代码中,我们知道 radius 的类型,因此我们可以安全地进行此优化。对我来说,这似乎是 Fable 相对于 JavaScript 的一大优势。

但是,此类优化实际上需要在某处实现。

  • 是否可以在 Fable 中启用这样的优化?
  • 如果没有,是否有其他工具可以执行此类优化?

最佳答案

我希望 Fable 或任何其他转译器能够保留代码的结构。因此,您可以优化 F# 代码以仅计算一次 radius^2。

open Fable.Core

let inline sqr x = x * x

// Filters out `points` that are more than `radius` away
let inRadius radius =
let radiusSqr = sqr radius
List.filter (fun (x, y) -> sqr x + sqr y <= radiusSqr)

关于f# - Fable 中是否有任何优化 channel 可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59673552/

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