我查看了GHC.Prim的模块,发现似乎GHC.Prim中的所有数据都被定义为data Float#没有类似的东西=A|B,并且GHC.Prim中的所有函数都被定义为gtFloat# = let x = x in x.
我的问题是这些定义是否有意义以及它们的含义.
我检查了GHC.Prim的标题,如下所示
{-
This is a generated file (generated by genprimopcode).
It is not code to actually be used. Its only purpose is to be
consumed by haddock.
-}
Run Code Online (Sandbox Code Playgroud)
我想它可能与问题有一些关系,谁可以向我解释.
我想制作一个Haskell脚本来读取/ home文件夹中的文件.但是有许多以中文字符命名的文件,而Haskell和Ghci无法管理它.似乎Haskell和Ghci不擅长显示UTF-8字符.
这是我遇到的:
Prelude> "?Haskell??Ghci??????????????????"
"\35753Haskell\25110\32773Ghci\33021\27491\30830\26174\31034\27721\23383\24182\19988\35835\21462\27721\23383\21629\21517\30340\25991\26723"
Run Code Online (Sandbox Code Playgroud) 使用问题列出按广度优先顺序列出目录的所有内容效率低下我了解到效率低是由于递归monad函数的奇怪行为.
尝试
sequence $ map return [1..]::[[Int]]
sequence $ map return [1..]::Maybe [Int]
Run Code Online (Sandbox Code Playgroud)
和ghci将陷入无休止的计算.
如果我们以更易读的形式重写序列函数,如下所示:
sequence' [] = return []
sequence' (m:ms) = do {x<-m; xs<-sequence' ms; return (x:xs)}
Run Code Online (Sandbox Code Playgroud)
并尝试:
sequence' $ map return [1..]::[[Int]]
sequence' $ map return [1..]::Maybe [Int]
Run Code Online (Sandbox Code Playgroud)
我们得到了相同的情况,无休止的循环.
尝试一个有限的列表
sequence' $ map return [1..]::Maybe [Int]
Run Code Online (Sandbox Code Playgroud)
Just [1,2,3,4..]经过很长时间的等待,它会弹出预期的结果.
根据我们的尝试,我们可以得出结论,尽管序列的定义"似乎是懒惰的,但它是严格的,并且必须在序列结果之前得出所有数字"才能打印出来.
如果我们定义一个函数,不仅仅是序列'
iterateM:: Monad m => (a -> m a) -> a -> m [a]
iterateM f x = (f x) >>= iterateM0 f …Run Code Online (Sandbox Code Playgroud) 我想forall (P Q : Prop), (P -> Q) -> (Q -> P) -> P = Q.在Coq中证明或伪造.这是我的方法.
Inductive True2 : Prop :=
| One : True2
| Two : True2.
Lemma True_has_one : forall (t0 t1 : True), t0 = t1.
Proof.
intros.
destruct t0. destruct t1.
reflexivity.
Qed.
Lemma not_True2_has_one : (forall (t0 t1 : True2), t0 = t1) -> False.
Proof.
intros.
specialize (H One Two).
inversion H.
Run Code Online (Sandbox Code Playgroud)
但是,inversion H什么都不做.我想也许是因为coq的证明独立性(我不是英语母语,我不知道确切的词,请原谅我的无知),而且coq使得无法证明One = Two - > False.但是,如果是这样,为什么必须消除证据的内容? …
如何重塑形状的团块N x C x H x W,以N x 1 x (C*H) x W在来自Caffe?
我想制作一个卷积层,其权重在通道之间是相同的.
一种方法我想出是重塑形的底部BLOB N x C x H x W,以N x 1 x (C*H) x W和在其上面放置一个卷积层.但我只是不知道如何重塑一个blob.
请帮帮我,谢谢.
我已经学习了大约一年的Haskell,并提出了一个问题,有才能的编译器编写者可以添加一个名为"子集"的新功能来增强Haskell的类型系统以捕获许多错误,包括编译阶段的IOExceptions.我是类型理论的新手,并原谅我的一厢情愿.
我最初的目的不是如何解决问题,而是知道是否存在相关的解决方案,但由于某些原因,解决方案没有引入Haskell.
除了一些小事之外,Haskell在我的脑海里几乎是完美的,我将在以下几行中向Haskell表达我对未来的愿望.
以下是主要的一个:
如果我们可以定义一个类型,它只是Int假设Haskell允许我们这样做的"子集" ,如下:
data IntNotZero = Int {except `0`} -- certainly it is not legal in Haskell, but I just assume that Haskell allows us to define a type as a "subset" of an already existing type. I'm novice of Theory of types, and forgive me.
Run Code Online (Sandbox Code Playgroud)
并且如果函数需要参数Int,则该变量IntNotZero只是其"子集" Int,也可以是函数的参数.但是,如果函数需要a IntNotZero,则a Int是非法的.
例如:
div' :: Int -> IntNotZero -> Int
div' = div
aFunction :: Int -> Int -> Int …Run Code Online (Sandbox Code Playgroud) 我想编写一个Haskell函数,它的作用类似于flip,但更通用,可以使函数的任何参数成为最后一个参数.为方便起见,我们用pull它来代表它.
编写以下代码很容易:
Prelude> :t flip --we just call this function a swap
flip :: (a -> b -> c) -> b -> a -> c
Prelude> :t (flip.) --we just call this function a swap
(flip.) :: (a -> a1 -> b -> c) -> a -> b -> a1 -> c
Prelude> :t ((flip.).) --we just call this function a swap
((flip.).) :: (a -> a1 -> a2 -> b -> c) -> a -> a1 -> …Run Code Online (Sandbox Code Playgroud) 我通过阅读打印所有全局变量/局部变量一文了解到,我们可以在 gdb 的命令行中获取当前帧的所有变量。
我的问题是如何在 gdb 的 python 接口中获取当前帧的所有变量,因为info locals只以字符串形式给出结果并且不方便进一步使用。
这是一个简单的shell函数来计算阶乘.
#!/bin/bash
function factorial()
{
if (( $1 < 2 ))
then
echo 1
else
echo $(( $1 * $(factorial $(( $1 - 1 ))) ))
fi
}
factorial $1
Run Code Online (Sandbox Code Playgroud)
但我发现这个脚本在给出非常大的输入时会创建许多子shell.没有必要也没有效率.有没有办法在不创建新子shell的情况下调用递归函数?
我的目标不是如何在shell中编写阶乘函数,而是在调用递归定义的函数时如何避免创建子shell.
实际上,即使是简单的函数调用也会导致创建子shell:
#!/bin/bash
function fac0() {
ps >> log
echo $1
}
function fac1() {
ps >> log
echo $(( $1 * $(fac0 $(( $1 - 1 ))) ))
}
touch log
fac1 $1
Run Code Online (Sandbox Code Playgroud)
运行脚本后,log文件的内容为:(它仍会创建子shell)
PID TTY TIME CMD
9205 pts/8 00:00:00 bash
9245 pts/8 00:00:00 call_subshell.s …Run Code Online (Sandbox Code Playgroud) 我想将一个FnMut闭包包装成RefCell如下所示:
fn borrow_mut_closure() {
let mut temp = 3i32;
let cl = RefCell::new(move || {
temp += 1;
println!("{}", temp);
});
cl.borrow_mut()();
}
Run Code Online (Sandbox Code Playgroud)
但令我惊讶的是,编译器报告:
cannot borrow data in a dereference of `std::cell::RefMut<'_, [closure@src/main.rs:17:25: 20:4 temp:i32]>` as mutable
cannot borrow as mutable
help: trait `DerefMut` is required to modify through a dereference, but it is not implemented for `std::cell::RefMut<'_, [closure@src/main.rs:17:25: 20:4 temp:i32]>`rustc(E0596)
Run Code Online (Sandbox Code Playgroud)
但为什么不实施呢?我怎样才能克服这个问题?
haskell ×5
recursion ×2
bash ×1
c ×1
caffe ×1
character ×1
cjk ×1
closures ×1
coq ×1
curry-howard ×1
debugging ×1
equality ×1
exception ×1
gdb ×1
ghc ×1
ghci ×1
haddock ×1
lambda ×1
loops ×1
monads ×1
mutable ×1
polymorphism ×1
process ×1
proof ×1
python ×1
reshape ×1
rust ×1
shell ×1
subclass ×1
type-systems ×1
typeclass ×1
types ×1
unicode ×1