小编ddk*_*ddk的帖子

Lua:从float转换为int

尽管Lua没有区分浮点数和整数,但有些情况下你想要使用整数.如果你不能做一个类似C的演员或没有类似Python的东西,将数字转换为整数的最佳方法是什么int

例如,在计算数组的索引时

idx =位置/宽度

你怎么能确保idx有效的数组索引?我提出了一个使用的解决方案string.find,但也许有一种使用算法的方法显然会更快.我的解决方案

function toint(n)
    local s = tostring(n)
    local i, j = s:find('%.')
    if i then
        return tonumber(s:sub(1, i-1))
    else
        return n
    end
end
Run Code Online (Sandbox Code Playgroud)

floating-point lua

28
推荐指数
3
解决办法
7万
查看次数

如何计算函数被调用的次数,FP方式

我目前正在与Haskell 一起完成SICP.练习1.15询问函数被调用的次数.这个想法可能是你应该使用替换方法,但我想知道如何在代码中这样做.

在命令式语言中,可以保留全局变量,并在每次调用函数时递增它.但是你会如何在Haskell(或纯粹的功能方式)中实现呢?

haskell functional-programming

14
推荐指数
2
解决办法
2357
查看次数

词汇与动态范围在SICP的环境评估模型方面

在SICP的3.2.2节中执行以下代码

(define (square x)
  (* x x))
(define (sum-of-squares x y)
  (+ (square x) (square y)))
(define (f a)
  (sum-of-squares (+ a 1) (* a 2)))

(f 5)
Run Code Online (Sandbox Code Playgroud)

根据该图解释.

每次应用函数时,都会创建一个新帧(标记为E1through E4),表示符号和值之间的一组绑定.当符号未绑定在框架中时,将查询该框架的封闭环境以查找该特定符号的绑定.

该图的有趣之处在于标记的所有帧E都包含在全局环境中.该文本解释说这是因为函数是在全局环境中定义的,但没有详细说明问题:

请注意,每个帧都由square指向全局环境创建,因为这是square过程对象指示的环境.

相反,如果框架包含在调用函数的环境中,比如E3包含在E2其中E1,那么它是否是动态作用域语言如何工作的有效模型?此外,图中的框架具有相同的"父"环境的方式是因为Scheme是词法范围的吗?

scheme sicp dynamic-scope lexical-scope

11
推荐指数
1
解决办法
1228
查看次数