在以下示例中,对于以下调用,类型推断失败mkPair2:
#include <functional>
template <class A, class B>
struct Pair {
A left; B right;
};
template <class A, class B>
Pair<A,B> mkPair1 (A left, B right) {
return (Pair<A,B>) { left, right };
}
template <class A, class B>
std::function<Pair<A,B>(B)> mkPair2 (A left) {
return [left] (B right) {
return (Pair<A,B>) { left, right };
};
}
Pair<int, char> ex1 = mkPair1 (2, 'a');
Pair<int, char> ex2 = mkPair2 (2) ('a');
Run Code Online (Sandbox Code Playgroud)
问题是mkPair2有两个模板参数,但是调用(2)只提供了其中一个参数,因此编译器立即抛出它并确定程序是不明确的,即使第二种类型可以从下面的('a') …
所以我试图找到使用数字15来表示数字5的方法
import Data.List
import Control.Monad
import Control.Monad.Omega
import System.IO
data Expr = X | Sub Expr Expr | Div Expr Expr | Pow Expr Expr
deriving Show
eval x X = x
eval x (Sub a b) = eval x a - eval x b
eval x (Div a b) = eval x a / eval x b
eval x (Pow a b) = eval x a ** eval x b
exprs | v <- each exprs
= (X:) . …Run Code Online (Sandbox Code Playgroud) 我用几种语言编写了相同的控制台应用程序.应用程序向用户询问一个数字,并从1到该数字进行计数,在控制台的单独行上打印每个数字.我实际上期望vb.net在编程语言中变得最糟糕,让我好奇的是它没有,它实际上是最快的.
VB.Net - 运行VS调试器:
Sub Main()
Console.Write("Give me a number, any number: ")
For i = 1 To CInt(Console.ReadLine)
Console.WriteLine(i)
Next
Console.ReadLine()
End Sub
Run Code Online (Sandbox Code Playgroud)
C++ - 运行VS调试器(比VB慢大约5倍):
#include <iostream>
using namespace std;
int main() {
cout << "Give me a number, any number: ";
int number; cin >> number;
cout << '\n';
for (int i = 1; i <= number; i++) cout << i << '\n';
while (true) {}
}
Run Code Online (Sandbox Code Playgroud)
Haskell - 从控制台编译并运行(仅比VB略慢):
import System.IO
import Control.Monad
main = do …Run Code Online (Sandbox Code Playgroud)