小编phi*_*ler的帖子

使用DataKind在类型签名中绑定名称

所以,我终于找到了一个可以使用新DataKinds扩展的任务(使用ghc 7.4.1).这是Vec我正在使用的:

data Nat = Z | S Nat deriving (Eq, Show)

data Vec :: Nat -> * -> * where
    Nil :: Vec Z a
    Cons :: a -> Vec n a -> Vec (S n) a
Run Code Online (Sandbox Code Playgroud)

现在,为了方便我想实现fromList.简单的递归/折叠基本上没有问题 - 但我无法弄清楚如何给它正确的类型.作为参考,这是Agda版本:

fromList : ? {a} {A : Set a} ? (xs : List A) ? Vec A (List.length xs)
Run Code Online (Sandbox Code Playgroud)

我的Haskell方法,使用我在这里看到的语法:

fromList :: (ls :: [a]) -> Vec (length ls) a
fromList [] …
Run Code Online (Sandbox Code Playgroud)

syntax haskell type-systems

9
推荐指数
1
解决办法
755
查看次数

枚举通用实例的所有值时的无限递归

对于我的另一个答案,我编写了以下代码,为可枚举的s 提供了对角遍历的 Universe实例Generic(它从那里的版本略微更新,但使用相同的逻辑):

{-# LANGUAGE DeriveGeneric, TypeOperators, ScopedTypeVariables #-}
{-# LANGUAGE FlexibleInstances, FlexibleContexts, DefaultSignatures #-}
{-# LANGUAGE UndecidableInstances, OverlappingInstances #-}

import Data.Universe
import Control.Monad.Omega
import GHC.Generics
import Control.Monad (mplus, liftM2)

class GUniverse f where
    guniverse :: Omega (f x)

instance GUniverse U1 where
    guniverse = return U1

instance (Universe c) => GUniverse (K1 i c) where
    guniverse = fmap K1 $ each (universe :: [c])        -- (1)

instance (GUniverse f) => GUniverse (M1 i …
Run Code Online (Sandbox Code Playgroud)

haskell strictness ghc-generics

9
推荐指数
1
解决办法
160
查看次数

Haskell 弱头范式

我被一些烦人的事情绊倒了。我知道 haskell 与弱头部范式 (WHNF) 一起工作,我知道这是什么。将以下代码输入 ghci(我正在使用命令 :sprint 将表达式简化为 WHNF,据我所知。):

let intlist = [[1,2],[2,3]]
:sprint intlist
Run Code Online (Sandbox Code Playgroud)

intlist = _这使得完全意义的我。

let stringlist = ["hi","there"]
:sprint stringlist 
Run Code Online (Sandbox Code Playgroud)

stringlist = [_,_] 这个已经让我困惑。但是之后:

let charlist = [['h','i'], ['t','h','e','r','e']]
:sprint charlist
Run Code Online (Sandbox Code Playgroud)

出人意料地给出 charlist = ["hi","there"]

据我了解 Haskell,字符串只不过是字符列表,这似乎是通过检查类型"hi" :: [Char]['h','i'] :: [Char].

我很困惑,因为根据我的理解,上面的所有三个示例或多或少都相同(列表列表),因此应该减少到相同的 WHNF,即 _。我错过了什么?

谢谢

haskell functional-programming reduction ghci weak-head-normal-form

9
推荐指数
1
解决办法
179
查看次数

如何在没有溢出的情况下在 Julia 中保存 10^19

我试图将数字 10^19 保存在 Julia 的变量中。

我知道它正在溢出,但我认为做类似的事情BigInt(10^19)Int128(10^19)会解决问题,但事实并非如此。

有什么想法吗?

查看 Julia 的溢出行为

julia

8
推荐指数
1
解决办法
152
查看次数

单例数组的魔力从何而来?

Vector{Missing}和之间的以下差异Vector{Int}让我感到惊讶(以积极的方式):

julia> @btime fill(20, 10^7);
  15.980 ms (2 allocations: 76.29 MiB)

julia> @btime fill(missing, 10^7);
  20.603 ns (1 allocation: 80 bytes)

julia> Base.summarysize(fill(20, 10^7))
80000040

julia> Base.summarysize(fill(missing, 10^7))
40

julia> typeof(fill(20, 10^7))
Vector{Int64} (alias for Array{Int64, 1})

julia> typeof(fill(missing, 10^7))
Vector{Missing} (alias for Array{Missing, 1})
Run Code Online (Sandbox Code Playgroud)

鉴于这fill(missing, n)不会产生像 那样的优化结构FillArray,那么这种对单例的优化是如何实现的呢?我猜想它会以某种方式自动从单例大小为零的事实中消失,但是如何呢?

我尝试阅读array.cjulia.h,但无法真正理解详细信息。也许真正的问题是运行时系统如何处理单例......?

arrays runtime julia

7
推荐指数
1
解决办法
197
查看次数

Gadfly情节中的标签功能

在Gadfly中直接绘制函数很容易:

plot([sin, cos], 0, 25)
Run Code Online (Sandbox Code Playgroud)

这给了我两个不同颜色的线,在传说中的东西像自动标记f_1f_2:

在此输入图像描述

如何更改"颜色"图例中的默认名称?

julia gadfly

6
推荐指数
1
解决办法
111
查看次数

将字典数组一次性放入 Julia 中的 DataFrame

我有一系列字典如下:

julia> data  
2-element Array{Any,1}:  
 Dict{String,Any}("ratio1"=>1.36233,"time"=>"2014-06-19T15:47:40.000000Z","ratio2"=>1.36243)
 Dict{String,Any}("ratio1"=>1.3623,"time"=>"2014-06-19T15:48:00.000000Z","ratio2"=>1.36245)
Run Code Online (Sandbox Code Playgroud)

我怎样才能把它一次性弹出到一个数据帧中,而不用一个一个地循环遍历每个字典和键,这样我就有一个如下所示的数据帧:

2×3 DataFrame
? Row ? ratio1  ? ratio2  ? time                        ?
?     ? Float64 ? Float64 ? String                      ?
?????????????????????????????????????????????????????????
? 1   ? 1.36233 ? 1.36243 ? 2014-06-19T15:47:40.000000Z ?
? 2   ? 1.3623  ? 1.36245 ? 2014-06-19T15:48:00.000000Z ?
Run Code Online (Sandbox Code Playgroud)

julia

6
推荐指数
1
解决办法
908
查看次数

是否可以为矩阵分解预先分配数组?

我的问题不是F = svd(A),可以先为 SVD 结构分配适当的内存,然后再做F .= svd(A)吗?

我的想法是这样的:

function main()
    F = Vector{SVD}(undef,10)
    # how to preallocate F?
    test(F)
end

function test(F::Vector{SVD})
    for i in 1:10
        F .= svd(rand(3,3))
    end
end
Run Code Online (Sandbox Code Playgroud)

julia

6
推荐指数
1
解决办法
241
查看次数

如何不在每个 conda 环境中安装 Jupyter?

TL/DR:是否真的没有办法只告诉jupyter console在某些 conda 环境中运行,而不首先在该环境中不必要地安装(并因此依赖)Jupyter?

我确实试图让这看起来不完全像咆哮......我希望你看到这里一个实际的问题。


似乎让 Jupyter 在 conda 环境中工作需要

  1. 在您想要使用的每个 conda 环境中安装新的 Jupyter,或者
  2. 在您想要使用的每个 conda 环境中安装 ipykernel(这取决于 jupyter 包...),并从环境中创建一个新内核。

我觉得这有点令人惊讶,因为我不认为 Jupyter 作为项目的要求,而只是作为另一个编辑器/IDE 之类的东西,利用环境。Conda 的目的是管理可重现的依赖关系;Jupyter 应该是在我告诉它的环境中解释代码。由于我想将environment.yml存储在git中并与其他人共享,因此我认为要求他们安装Jupyter没有任何意义;他们甚至可能不会使用它。

然而,它似乎根本不是这样工作的。感觉就像当我想使用 Emacs 来利用环境时,我必须在每个环境中安装一个“emacskernel”包。事情不是这样的。

我想要的是有一个全局安装的 Jupyter,它可以指向不同的环境 - 类似于 Julia REPL 的工作方式julia --project=...(是的,我知道 conda 不是内置的语言包管理器,但是你应该明白这个类比......)。(如果 conda 环境“继承”,即回退到“全局环境”以查找未找到的依赖项,那么这会起作用,并且您可以只使用每个环境中的全局 Jupyter;但据我了解,它们不这样做? )

这有可能吗?我缺少什么?有没有更好的替代方案提供全球 Jupyter + 本地环境?(我必须承认我从未使用过 virtualenv 之类的东西......)


这个较旧的问题似乎涵盖了 pipelinev 的相同主题,但那里没有真正的答案......既没有明确的NO,也没有解释原因。)

python conda jupyter

6
推荐指数
0
解决办法
554
查看次数

为什么分配 Union{T, Missing} 数组比分配 T 数组慢一个数量级?

在 Julia 中分配一个数组Union{T, Missing}是非常昂贵的。有什么解决方法吗?

julia> @time Vector{Union{Missing, Int}}(undef, 10^7);
  0.031052 seconds (2 allocations: 85.831 MiB)

julia> @time Vector{Union{Int}}(undef, 10^7);
  0.000027 seconds (3 allocations: 76.294 MiB)
Run Code Online (Sandbox Code Playgroud)

arrays performance julia

6
推荐指数
2
解决办法
237
查看次数