为什么如果我有这样的函数,交换两个数字,它不起作用[swap],(我知道我可以通过在原型中声明指针,然后传递相应变量的地址来实现main()),但适用于数组,无需传递指针和地址.
不行
void num_exchange(int m, int n);
int main(){
int num1 = 5;
int num2 = 6;
num_exchange(num1 , num2 );
cout << "num1 =" << num1 << endl;
cout << "num2 =" << num2 << endl;
return 0;
}
void num_exchange(int m, int n){
int temp;
temp = m;
m = n;
n = temp;
}
Run Code Online (Sandbox Code Playgroud)
作品
void arr_exchange(int [], int);
int main(){
int n[7] = { 0, 0, 0, 0, 0, 0, 0 };
arr_exchange(n, 7);
for (int …Run Code Online (Sandbox Code Playgroud) 我知道要循环使用字母表,可以做到
for c in {a..z}; do something; done
Run Code Online (Sandbox Code Playgroud)
我的问题是,我如何遍历第一个n字母(例如构建一个字符串),其中n是命令行中给出的变量/参数.
我搜索了SO,并且只找到了为数字做这个的答案,例如使用C风格的for循环或seq(参见例如如何迭代Bash中由变量定义的一系列数字?).我没有seq在我的环境中.
谢谢.
根据这个课程,所有构造函数(对于归纳类型)都是单射的和不相交的:
...类似的原则适用于所有归纳定义的类型:所有构造函数都是单射的,并且由不同构造函数构建的值永远不会相等.对于列表,cons构造函数是单射的,nil与每个非空列表不同.对于布尔,真假都是不平等的.
(以及inversion基于这种假设的策略)
我只是想知道我们怎么知道这个假设成立了?
我们怎么知道,例如,我们不能基于定义自然数
1)一个继承者,也许是像这样的"双"构造函数:
Inductive num: Type :=
| O : num
| S : num -> num
| D : num -> num.
Run Code Online (Sandbox Code Playgroud)
和
2)一些plus功能,以便2通过两个不同的序列/路由构造函数可以达到一个数字,S (S O)并且D (S O)?
Coq的机制是什么,以确保上述内容永远不会发生?
PS我不是建议上面的num例子是可能的.我只是想知道是什么让它变得不可能.
谢谢
我想知道是否有可能编写一个Haskell添加运算符,它可以处理两个数字,两个数字列表,两个数字矩阵,......等等.也就是说,是否可以定义<+>以下所有内容?:
1 <+> 2 = 3
[1] <+> [2] = [3]
[[1]] <+> [[2]] = [[3]]
...
Run Code Online (Sandbox Code Playgroud)
我知道,在Haskell中添加列表的惯用方法是什么?,我们可以做+的a,zipWith (+)对[a].可能zipWith (zipWith (+))是[[a]]沿着同一条线,等等......
但是可以使用一个运算符(如Matlab所能)使用类型类或Haskell的其他功能来完成吗?
我知道这是合成糖,但如果可能,它会很甜.
- 更新 -
我看到使用(Num a)@ DanielWagner的答案中所解释的可能是有问题的,并且最好Integer, Double为基本情况单独定义它等.
仅仅是为了记录,我只是按照建议尝试:
{-# LANGUAGE FlexibleInstances, UndecidableInstances #-}
class Additive a where (<+>) :: a -> a -> a
instance Num a => Additive a where (<+>) = (+)
instance Additive a …Run Code Online (Sandbox Code Playgroud) 是否有一种简洁的方法来更改函数的返回类型?
考虑例如 comparing在Data.Ord.它返回一个Ordering.然而,我只对这两个项目是否相同感兴趣.所以我需要将结果转换Ordering为a Bool.
我能想到的一个直接的方法是:
isEqualOn f x y = if comparing f x y==EQ then True else False
Run Code Online (Sandbox Code Playgroud)
(或isEqualOn f x y = comparing f x y==EQ在评论中指出).
是否有更多的组合方式来做到这一点(有点适应comparing或以无意义的方式编写它)而不必写出一切?理想情况下,我正在寻找适用于n-ary函数的东西.
- 更新 -
正如答案/评论所建议的那样,上面的具体例子(isEqualOn)可以使用标准on函数实现on (==).但是,我的问题是关于以组合/无意义的方式更改函数返回类型的一般技术,如评论中的SEC方法所示.
我有一点问题.我想在一个字符数组中拆分一个String,在那里我可以处理每个字符.
例如:
"Hello"
arrayofstring[0] ->H
arrayofstring[1] ->e
arrayofstring[2] ->l
arrayofstring[3] ->l
arrayofstring[4] ->o
Run Code Online (Sandbox Code Playgroud)
我感谢你的每一个帮助.
我的 PHP 程序使用 生成 PDF TCPDF,然后:
对于第 3 步,我想检查上传的文件是否经过数字签名。
更好的是检查上传的文件是否与程序在步骤 1 中生成的文件相同。
我有时会在Coq中看到这种语法来表示某些类型/集合,例如在打印有关存在变量的信息时:
?T : [ |- Set]
?T0 : [ x : ?T |- Set ]
Run Code Online (Sandbox Code Playgroud)
我不知道如何搜索这种语法。
这是什么意思?
第一个与
? T : Set
Run Code Online (Sandbox Code Playgroud)
?
有没有办法将元组作为 Lua 函数的参数传递?
例如,我有一个返回多个值的函数
function f(a,b) return b,a end
Run Code Online (Sandbox Code Playgroud)
我希望这个功能f被重复应用,所以我可以写:
f (f ... f(1,2))
Run Code Online (Sandbox Code Playgroud)
但是如果我需要将这个初始元组存储(1,2)为一个变量init呢?
f (f ... f(init))
Run Code Online (Sandbox Code Playgroud)
是否有支持?
根据这个答案,python 似乎将它与 splat 运算符一起使用*。
我试图用GHCI并:set args进行main如下:
:set args "(\x -> x )"
Run Code Online (Sandbox Code Playgroud)
GHCi抱怨:
Couldn't read "\"(\\x -> x )\""as String
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这不能被视为一个字符串.我可以不用引号:
:set args (\x -> x )
Run Code Online (Sandbox Code Playgroud)
但显然,这是不正确的,它将被解释为4个参数而不是1个,如下面的main函数所示.
import System.Environment
main = do
args <- getArgs
putStrLn $ show $ length args
Run Code Online (Sandbox Code Playgroud)
有关如何将其传递给GHCi的任何指示?(我可以从命令行将其传递给已编译的ghc代码.)
谢谢,