有时我会写这样的代码
solveLogic :: Int -> Int -> Int
solveLogic a b =
let
x = 1
brainiac
| a >= x = 1
| a == b = 333
| otherwise = 5
in
brainiac
Run Code Online (Sandbox Code Playgroud)
每次我都强烈要求编写这些东西而不需要"brainiac"功能,如下所示:
solveLogic :: Int -> Int -> Int
solveLogic a b =
let
x = 1
in
| a >= x = 1
| a == b = 333
| otherwise = 5
Run Code Online (Sandbox Code Playgroud)
哪个代码更像是"Haskellish".有没有办法做到这一点?
我是Haskell的狂热爱好者,并且一直坚持在Windows上编译我的小Haskell程序.我的程序使用iconv包,后者又使用用c/c ++编写的外部库.为了让事情有效我有:
PATH
变量中,其中'libiconv-2.dll'和'libiconv2.dll'位于该文件夹中.现在,当我尝试在Leksah中构建我的模块时,我从'GHC'获得以下消息:
Building norms-parser-0.0.1...
Linking dist\build\norms-parser\norms-parser.exe ...
C:\Documents and Settings\kdv\Application Data\cabal\iconv-0.4.1.0\ghc-7.0.4/libHSiconv-0.4.1.0.a(hsiconv.o):hsiconv.c:(.text+0x7): undefined reference to `_imp__libiconv_open'
C:\Documents and Settings\kdv\Application Data\cabal\iconv-0.4.1.0\ghc-7.0.4/libHSiconv-0.4.1.0.a(hsiconv.o):hsiconv.c:(.text+0x17): undefined reference to `_imp__libiconv'
C:\Documents and Settings\kdv\Application Data\cabal\iconv-0.4.1.0\ghc-7.0.4/libHSiconv-0.4.1.0.a(hsiconv.o):hsiconv.c:(.text+0x27): undefined reference to `_imp__libiconv_close'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
有了'GHCi',我也面临一个问题:
ghc.exe: unable to load package `iconv-0.4.1.0'
ghc.exe: C:\Documents and Settings\kdv\Application Data\cabal\iconv-0.4.1.0\ghc- 7.0.4\HSiconv-0.4.1.0.o: unknown symbol `__imp__libiconv_open'
Run Code Online (Sandbox Code Playgroud)
我认为可能的解决方案是将c/c ++头文件正确设置为'mingw'文件夹并将PATH变量设置为'lib'文件,但我对它知之甚少,所以任何帮助都将非常感激.
当我的Windows控制台应用程序使用ghc编译结束时,控制台窗口立即关闭.这有点好,但是当我想从中读取一些文本输出时,这不是很好.所以,现在我将这个丑陋的代码添加到我的应用程序中:
main =
do
...HERE IS THE CODE ...
putStrLn " $$ Every thing have passed well $$ /n Press Enter "
_ <- getLine
return ()
Run Code Online (Sandbox Code Playgroud)
这非常难看,而且当一些错误导致我的应用程序崩溃时,控制台窗口会关闭.另一种在'cmd'控制台中运行程序的方法,但有时候不舒服.处理程序输出有没有好看又方便的方法?
只需用简单的计算器进行锻炼.我试图跑到前面,把它包裹在do-while循环中.然后我有一个奇怪的行为 - 在每个新循环上捕获空字符串.人们可以在case ""代码部分看到它.
那么问题 - 发生了什么以及如何处理它?
我可以看到我在代码中的注释行上修改它的谦虚尝试:
import std.stdio;
import std.string;
void main() {
writefln("--- Welcome to calculatro %s ---", " ");
int exit = 0;
do {
string op;
double first;
double second;
writeln("enter operator :");
op = chomp(readln());
writeln("operator :",op,":");
//readf(" %s/n", &op);
switch (op) {
case "add", "+":
writeln("enter two values :");
//readf(" %s %s", &first, &second);
readf(" %s", &first);
readf(" %s", &second);
writefln("%s+%s=%s", first, second, first+second);
//writeln(first+second);
break;
case "minus", "-", "substract":
writeln("enter …Run Code Online (Sandbox Code Playgroud)