小编Dav*_*ang的帖子

在Julia中提取参数类型

假设我在Julia中编写了一个函数,它接受一个Dict{K,V}参数,然后创建类型Array{K,1}和的数组Array{V,1}.我怎样才能提取类型K,并V从字典对象,这样我可以用它们来创建阵列?

julia

7
推荐指数
2
解决办法
3327
查看次数

瑞典人怎么会非常瑞典问候?

考虑以下Haskell定义,取自YouTube上优秀的Haskell视频:

import Data.List
greeting = "Hello"
swedish = intersperse 'f'
very f x = f (f (f x))
Run Code Online (Sandbox Code Playgroud)

如果我们将它们加载到GHCi中,我们会看到以下结果:

ghci> swedish greeting
"Hfeflflfo"
ghci> very swedish greeting
"Hfffffffeffffffflffffffflfffffffo"
ghci> very very swedish greeting
"Hffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffff... (536,870,913 chars total)
Run Code Online (Sandbox Code Playgroud)

前两个输出我完全理解.A swedish greeting出现穿插fs,a very swedish greeting只是a swedish (swedish (swedish greeting)),穿出三次.

但究竟在第三个输入线上发生了什么?我对Haskell语法的理解(相当不完整)表明,以空格分隔的表达式序列被解释为函数调用,其中第一个表达式是函数,其余表达式是参数.在这种情况下,如何在最外层very被称为三个参数(very,swedish,和greeting)时,它只能定义为接受两个?

如果它有帮助,似乎a very very swedish greeting等同于a swedish $ swedish $ swedish $ swedish $ …

haskell composition higher-order-functions

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

我怎样才能简明扼要地编写大量显式函数模板实例?

我正在编写一个C++库,其中包含许多我希望显式实例化并导出多个类型参数的函数模板.在我的具体情况,我有很多的,我想单独实例化和编译数值函数模板float,doublelong double.他们看起来像这样:

template <typename T>
T calculate_a(T x) { ... }

template <typename T>
T calculate_b(T x, T y) { ... }

// ...
Run Code Online (Sandbox Code Playgroud)

如果我有M个函数模板和N个底层类型,那么我有M*N显式实例化来输出.是否可以更简洁地编写这些实例?

我目前的解决方案是使用预处理器宏来执行给定类型的所有实例化:

#define EXPLICITLY_INSTANTIATE(T) \
    template T calculate_a<T>(T x); \
    template T calculate_b<T>(T x, T y); \
    // ...

EXPLICITLY_INSTANTIATE(float);
EXPLICITLY_INSTANTIATE(double);
EXPLICITLY_INSTANTIATE(long double);
Run Code Online (Sandbox Code Playgroud)

但是,这不是最理想的,因为它要求我单独维护每个函数模板签名的另一个副本.另外,如果我想在多个翻译单元中执行此操作,那么我需要单独维护每个翻译单元中的基础类型列表.(假设C++ 2a添加了long long double我想要支持的类型;我必须添加EXPLICITLY_INSTANTIATE(long long double);到每个文件.)

另一种可能的方法是将我的所有函数收集到(仅限静态)模板类中:

template <typename T>
class calculate {
    T a(T x) { ... }
    T b(T x, T …
Run Code Online (Sandbox Code Playgroud)

c++ templates instantiation explicit-instantiation

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

Julia中的有理矩阵划分

在Julia中,两个有理数矩阵的矩阵除法返回一个浮点矩阵.如何获得有理数的矩阵呢?

我不能只使用,convert(Array{Rational}, A \ b)因为与浮点数相关的精度损失.

julia

5
推荐指数
1
解决办法
530
查看次数

是否有任何带有隐式乘法的编程语言?

是否存在以下任何一种编程语言:

  • 变量旁边的数字文字3x-0.5y
  • 带括号的表达式旁边的数字文字或数字变量 a(b+c+d) 2(x-y)
  • 两个相邻的带括号的表达式 (1+x)(1-x) (4a-5b)(1+4c)

被解释为乘法?

我可以看到这会引起语法上的问题,但是我很好奇是否有任何一种语言已经成功地做到了。

syntax programming-languages

4
推荐指数
1
解决办法
402
查看次数

在Julia中声明多个数组

假设我需要声明(但不是初始化)五个10x10数组的值,比如说,A1- A5.Fortran为这种多数组声明提供了很好的语法:

REAL(8), DIMENSION(10,10) :: A1, A2, A3, A4, A5
Run Code Online (Sandbox Code Playgroud)

然而,我所知道的Julia中唯一的方法更为丑陋:

A1 = Array(Float64, 10, 10)
A2 = Array(Float64, 10, 10)
A3 = Array(Float64, 10, 10)
A4 = Array(Float64, 10, 10)
A5 = Array(Float64, 10, 10)
Run Code Online (Sandbox Code Playgroud)

有没有更简洁的方法来声明Julia中相同维度的多个数组?

arrays julia

3
推荐指数
1
解决办法
448
查看次数