假设我在Julia中编写了一个函数,它接受一个Dict{K,V}
参数,然后创建类型Array{K,1}
和的数组Array{V,1}
.我怎样才能提取类型K
,并V
从字典对象,这样我可以用它们来创建阵列?
考虑以下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
出现穿插f
s,a very swedish greeting
只是a swedish (swedish (swedish greeting))
,穿出三次.
但究竟在第三个输入线上发生了什么?我对Haskell语法的理解(相当不完整)表明,以空格分隔的表达式序列被解释为函数调用,其中第一个表达式是函数,其余表达式是参数.在这种情况下,如何在最外层very
被称为三个参数(very
,swedish
,和greeting
)时,它只能定义为接受两个?
如果它有帮助,似乎a very very swedish greeting
等同于a swedish $ swedish $ swedish $ swedish $ …
我正在编写一个C++库,其中包含许多我希望显式实例化并导出多个类型参数的函数模板.在我的具体情况,我有很多的,我想单独实例化和编译数值函数模板float
,double
和long 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) 在Julia中,两个有理数矩阵的矩阵除法返回一个浮点矩阵.如何获得有理数的矩阵呢?
我不能只使用,convert(Array{Rational}, A \ b)
因为与浮点数相关的精度损失.
是否存在以下任何一种编程语言:
3x
,-0.5y
a(b+c+d)
2(x-y)
(1+x)(1-x)
(4a-5b)(1+4c)
被解释为乘法?
我可以看到这会引起语法上的问题,但是我很好奇是否有任何一种语言已经成功地做到了。
假设我需要声明(但不是初始化)五个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中相同维度的多个数组?