所以我最近一直在阅读有关coinduction的内容,现在我想知道:Haskell列出了归纳还是共同?我也听说Haskell没有区分这两者,但如果是这样的话,他们怎么这样做呢?
列表是归纳定义的data [a] = [] | a : [a],但可以共同使用,ones = a:ones.我们可以创建无限列表.然而,我们可以创建有限列表.他们是哪一个?
相关的是Idris,其中类型List a严格地是归纳类型,因此仅是有限列表.它的定义类似于Haskell中的方式.然而,Stream a是一种共同类型,建模无限列表.它被定义为(或者更确切地说,定义相当于)codata Stream a = a :: (Stream a).创建无限List或有限Stream是不可能的.但是,当我写出定义时
codata HList : Type -> Type where
Nil : HList a
Cons : a -> HList a -> HList a
Run Code Online (Sandbox Code Playgroud)
我得到了我对Haskell列表的期望,即我可以创建有限和无限结构.
所以让我把它们归结为几个核心问题:
Haskell不区分归纳和共感类型吗?如果是这样,那是什么形式化?如果没有,那么哪个是[a]?
HList是coinductive吗?如果是这样,coinductive类型如何包含有限值?
如果我们定义data HList' a = L (List a) | R (Stream a)怎么办?会考虑什么和/或仅对它有用HList?
我有一个ImageView,我已经应用了旋转动画.由于我希望循环继续,我在rotate.xml中将repeatCount作为无限:
android:repeatCount="infinite"
Run Code Online (Sandbox Code Playgroud)
在onCreate()中,我加载动画并启动它.
Animation myAnim = AnimationUtils.loadAnimation(this, R.anim.rotate);
objectImg.startAnimation(myAnim);
Run Code Online (Sandbox Code Playgroud)
按下按钮时,必须停止旋转.因此在我的onClick()中,我调用了clearAnimation().
objectImg.startAnimation(myAnim);
Run Code Online (Sandbox Code Playgroud)
我的简单问题是停止动画是否正确.我假设clearAnimation()对应于loadAnimation(),但是没有与startAnimation()对应的stopAnimation().
我正在重新设计我的网站,并一直在寻找使用JavaScript和jQuery.这是我到目前为止:http://www.tedwinder.co.uk/gallery2/.
我的愿景是将所有照片放在一个页面上,用户可以像现在一样滚动浏览.但是,我理解在一个页面上有50多个大图像的限制和影响,并考虑使用无限滚动和延迟加载,我理解只会在用户到达时加载图像,或者当他们点击时"更多"链接?
所以,我的问题是:这会降低页面加载,我究竟会去有效地实施无限滚动/延迟加载和将这项工作,或者你能想到的这样做的任何更有效的方法?
谢谢,特德
引用@dfeuer对这个问题的回答:在Haskell中构造循环列表的最便宜的方法,它说使用循环列表"击败"垃圾收集器,因为它必须保留你从循环列表中分配的所有内容,直到你删除引用列表中的任何缺点单元格.
显然在Haskell中,循环列表和无限列表是两个独立的事物.这篇博客(https://unspecified.wordpress.com/2010/03/30/a-doubly-linked-list-in-haskell/)说如果你实现cycle如下:
cycle xs = xs ++ cycle xs
Run Code Online (Sandbox Code Playgroud)
它是一个无限列表,而不是循环列表.要使它循环,你必须像这样实现它(如Prelude源代码中所示):
cycle xs = xs' where xs' = xs ++ xs'
Run Code Online (Sandbox Code Playgroud)
这两种实现之间究竟有什么区别?为什么如果你在循环列表中的某个地方持有一个cons小区,垃圾收集器必须在分配之前保留所有内容?
在Haskell中,一些列表是循环的:
ones = 1 : ones
Run Code Online (Sandbox Code Playgroud)
其他人则不是:
nums = [1..]
Run Code Online (Sandbox Code Playgroud)
然后有这样的事情:
more_ones = f 1 where f x = x : f x
Run Code Online (Sandbox Code Playgroud)
这表示与该值相同的值ones,当然该值是重复序列.但它是否在内存中表示为循环数据结构是值得怀疑的.(一个实现可以这样做,但这个答案解释说"这不太可能在实践中发生".)
假设我们采用Haskell实现并在其中入侵一个内置函数isCycle :: [a] -> Bool,该函数检查参数的内存中表示的结构.True如果列表是物理循环的并且False参数的长度是有限的,则返回.否则,它将无法终止.(我想"在黑客入侵"因为在Haskell中编写该函数是不可能的.)
这个函数的存在是否会打破语言的任何有趣属性?
我有一个数据类型
data N a = N a [N a]
Run Code Online (Sandbox Code Playgroud)
玫瑰树和应用实例
instance Applicative N where
pure a = N a (repeat (pure a))
(N f xs) <*> (N a ys) = N (f a) (zipWith (<*>) xs ys)
Run Code Online (Sandbox Code Playgroud)
并需要证明适用法律.然而,纯粹创造无限深,无限分枝的树木.因此,例如,在证明同态定律
pure f <*> pure a = pure (f a)
Run Code Online (Sandbox Code Playgroud)
我认为这证明了平等
zipWith (<*>) (repeat (pure f)) (repeat (pure a)) = repeat (pure (f a))
Run Code Online (Sandbox Code Playgroud)
通过近似(或采取)引理将起作用.然而,我的尝试导致归纳步骤中的"恶性循环".特别是减少
approx (n + 1) (zipWith (<*>) (repeat (pure f)) (repeat (pure a))
Run Code Online (Sandbox Code Playgroud)
给
(pure f <*> …Run Code Online (Sandbox Code Playgroud) 我正在使用离子框架来创建一个基本的Feed应用程序.我得到了复习,但我的离子无限滚动有问题.
<ion-content ng-controller="FeedController" >
<ion-refresher pulling-text="Pull to refresh.." on-refresh="get_feeds()" refreshing-text="Fetching ..." refreshing-icon="ion-loading-b">
</ion-refresher>
<ion-list>
<ion-item ng-repeat="question in questions">
<div class="item item-divider">
{{question.question}}
</div>
<div class="item" ng-bind-html="question.answer | trustHtml">
</div>
</ion-item>
</ion-list>
<ion-infinite-scroll
on-infinite="get_more()"
distance="1%">
</ion-infinite-scroll>
</ion-content>
Run Code Online (Sandbox Code Playgroud)
(function(){
"use strict";
angular.module( 'app.controllers' ).controller( 'FeedController',
[ 'eTobb', 'Users', '$scope', '$timeout', function( eTobb, Users, $scope, $timeout) {
var pageIndex = 1;
$scope.questions = [];
$scope.get_feeds = function(pageIndex){
eTobb.get($scope.apiCall, { user_id: Users.id, page: 0 }, function(response) {
if ( response ){
$scope.questions …Run Code Online (Sandbox Code Playgroud) 代码已更新
为了修复过滤的错误Interminable,以下代码更新并合并为原始:
public static bool IsInfinity(this IEnumerable x) {
var it=
x as Infinity??((Func<object>)(() => {
var info=x.GetType().GetField("source", bindingAttr);
return null!=info?info.GetValue(x):x;
}))();
return it is Infinity;
}
Run Code Online (Sandbox Code Playgroud)
bindingAttr 被宣布为常数.
摘要
我正在尝试实现一个无限的可枚举,但遇到的东西似乎是不合逻辑的,暂时没有想法.我需要一些方向来完成代码,成为一个语义,逻辑和合理的设计.
整个故事
几个小时前我问过这个问题:
这可能不是一个好的实施模式.我正在尝试做的是,以逻辑和语义的方式实现一个可枚举的无穷大(我想......).我会把代码放在这篇文章的最后.
的大问题是,它只是无限枚举呈现,但实际上它枚举没有任何意义,因为是它没有真正的元素.
因此,除了为枚举提供虚拟元素外,还有四个我能想象的选项,其中三个导致了StackOverflowException.
抛出InvalidOperationException一次它将被枚举.
public IEnumerator<T> GetEnumerator() {
for(var message="Attempted to enumerate an infinite enumerable"; ; )
throw new InvalidOperationException(message);
}
Run Code Online (Sandbox Code Playgroud)和3是技术上等同,让当它出现堆栈溢出的真正溢出.
public IEnumerator<T> GetEnumerator() {
foreach(var x in this)
yield return …Run Code Online (Sandbox Code Playgroud)我使用以下代码:
while (invalidInput)
{
// ask the user to specify a number to update the times by
System.out.print("Specify an integer between 0 and 5: ");
if (in.hasNextInt())
{
// get the update value
updateValue = in.nextInt();
// check to see if it was within range
if (updateValue >= 0 && updateValue <= 5)
{
invalidInput = false;
}
else
{
System.out.println("You have not entered a number between 0 and 5. Try again.");
}
} else
{
System.out.println("You have entered an …Run Code Online (Sandbox Code Playgroud) 我的问题是,当我执行时poetry install,poetry update或者poetry lock进程会无限期地运行。
我尝试使用该-vvv标志来获取正在发生的事情的输出,看起来它在第一次安装中永远卡住了。
我的连接良好,并且我尝试安装的所有软件包都存在。
我使用版本 1.2.1,但无法升级到较新的版本,因为文件的格式.lock不同并且我们的管道失败。
infinite ×10
haskell ×4
scroll ×2
android ×1
angularjs ×1
animation ×1
applicative ×1
c# ×1
coinduction ×1
cycle ×1
idris ×1
ienumerable ×1
imageview ×1
induction ×1
ionic ×1
java ×1
javascript ×1
jquery ×1
lazy-loading ×1
list ×1
loops ×1
python ×1