有时 Agda 会给我一些无意义的“不在范围内”错误,让我不知道该怎么做。下面是一个例子:
open import Data.Product
open import Data.Bool
open import Data.Unit
postulate
? : (Set ? Set) ? Set
In : {F : Set ? Set} ? F (? F) ? ? F
unIn : {F : Set ? Set} ? ? F ? F (? F)
NatT : Set
NatT = ? ? x -> ? Bool (? { true -> ?; false -> x })
x : NatT
x = In (false , In (true, tt))
Run Code Online (Sandbox Code Playgroud)
这个抱怨 …
请注意以下计划:
foo :: Int -> Int -> Bool
foo n x | x == n = True
foo n x | otherwise = foo n (x * 2) || foo n (x * 2 + 1)
main :: IO ()
main = print (foo 10 0)
Run Code Online (Sandbox Code Playgroud)
它实现了一个函数foo,它在两个分支中递归调用自身,在递归树时增加第二个参数.True如果它的第二个参数变得与第一个参数相等,那么"应该"返回,这是因为((0 * 2 + 1) * 2 + 1) * 2 == 10.但这不会发生,因为Haskell试图评估左分支深度优先.
通常,这可以通过实现BFS来解决,但在Haskell中这样做很尴尬.我想知道是否有任何自动化或至少不那么突兀的方式来评估递归函数广度优先?
我对将Formality-Core模块编译为 Haskell 库非常感兴趣。虽然我可以unsafeCoerce在任何地方使用,但如果我能保留类型信息,允许编译模块在 Cabal 上发布并被其他 Haskell 项目使用,那就更有趣了。问题是依赖类型允许被 Haskell 禁止的程序。例如,foo下面的函数:
foo: (b : Bool) -> If(b)(Nat)(Bool)
(b)
b<(b) If(b)(Nat)(Bool)>
| zero;
| false;
Run Code Online (Sandbox Code Playgroud)
根据输入返回不同的类型。如果输入为false,则返回数字zero。如果输入为true,则返回布尔值false。似乎这样的函数无法转换为 Haskell。我相信,在过去的几年里,Haskell 在依赖类型方面取得了很好的进展,所以,我想知道:有没有办法编写基于输入值返回不同类型的函数?
在 Kind-Lang 等函数式语言助手中,自然数通常被形式化为具有两个构造函数(零和 succ)的递归代数数据类型:
type Nat {
zero
succ(pred: Nat)
}
Run Code Online (Sandbox Code Playgroud)
至于 Int 类型,它也包含负数,在 Kind 上对其进行编码的最佳方法是什么?
你能举例说明一个人如何代表一个具有可变属性的"玩家"类,如HP和位置(3d矢量),init,setter和getter等函数?
例如,我想暂时映射到fxsj.也就是说,当我按q时,VIM将执行fxsqj.当我按k时,VIM将执行fxskj.等等.
Lodash和Underscore有一个名为mixin的方法,允许您扩展库.你如何编写一个扩展它们的库?
例如,如果您创建了名为"extend_lodash.js"的文件,则包含以下内容:
_.mixin({
new_function:function(){}
})
Run Code Online (Sandbox Code Playgroud)
你会如何在项目中使用它?以下代码不起作用:
_ = require("lodash");
require("extend_lodash.js");
Run Code Online (Sandbox Code Playgroud) 它是一个以精灵艺术作为纹理的平面,因此我希望它使用无插值方法进行缩放.
没有太多可以添加到这个问题.如何使用Processing.js水平翻转图像?