我正在研究编写类似于C++程序的Haskell代码的问题.
C++代码是:
class Rectangle
{
private:
int length;
int width;
public:
Rectangle()
{
length = 0;
width = 0;
}
Rectangle(int x)
{
length = x;
width =0;
}
Rectangle ( int x , int y)
{
length = x;
width = y;
}
};
Run Code Online (Sandbox Code Playgroud)
为了编写类似的Haskell代码,我创建了一个数据类型Rectangle
data Rectangle = Rectangle Length Width deriving (Eq, Show , Read)
type Length = Int
type Width = Int
Run Code Online (Sandbox Code Playgroud)
然后我想到了一个可以作为构造函数的加载函数.但我不明白如何使用不同数量的参数实现函数重载.请帮忙.谢谢.
有一个对象数组,要向其中添加对象,我尝试以下操作:
Shape ShapeList[30];
void addShape(Shape s)
{
for(int i=0; i<30;i++)
{
if(ShapeList[i] != '\0')
{ i++;}
else
{
ShapeList[i]=s;
numShapes++;
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
numShapes是一个整型变量,Shape 是类,ShapeList 是对象数组。但是编译器会以这种方式给出错误,!=不允许使用运算符。那么我该如何实现呢?
我正在研究这个问题,之前曾问过相关问题.状态Monad的实现为了进一步优化我的代码,我试图仅使用一个增量函数来实现它.
module StateExample where
import Control.Monad.State
data GlobState = GlobState { c1 :: Int, c2:: Int, c3:: Int} deriving (Show)
newGlobState:: GlobState
newGlobState = GlobState { c1=0,c2=0,c3=0 }
incr :: String-> State GlobState ()
incr x = do
modify(\g -> g {x =x g + 1})
main:: IO()
main = do
let a1= flip execState newGlobState $ do
incr c1
incr c2
incr c1
print a
Run Code Online (Sandbox Code Playgroud)
但在这里我得到一个错误
`x' is not a (visible) constructor field name
Run Code Online (Sandbox Code Playgroud)
我该如何删除此错误?
可能重复:
正确的C++代码文件扩展名?.cc vs .cpp
.c vs .cc vs. .cpp vs .hpp vs .h vs .cxx
我在带扩展名的文件中编写了C++代码.cpp,.cc或者.cxx
任何人都可以解释这三者之间有什么区别,哪一种最好(是平台依赖的),为什么?
我目前正在研究cygwin.
我有一个int数组,我已经为100个元素分配了空间.还有另一个阵列inShort[].我怎样才能转换inInt[]成inShort[]?
是否有必要分配新的内存,inShort[]或者有一种方法可以投射到inInt[]?
int inInt[] = new int[100];
short inShort[];
Run Code Online (Sandbox Code Playgroud) 我必须使用三指针将内存分配给3D数组.
#include <stdio.h>
int main()
{
int m=10,n=20,p=30;
char ***z;
z = (char***) malloc(sizeof(char**)*m*n*p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是正确的做法吗?(我认为我在做的是不正确的.)
returnIO在OOHaskell中用于返回对象作为方法的记录.但即使使用return而不是returnIO,输出或对象行为也没有区别.OOHaskell代码是:
{-# LANGUAGE EmptyDataDecls, DeriveDataTypeable, TemplateHaskell #-}
{-# OPTIONS_GHC -fcontext-stack=100 #-}
module Rectangle where
import OOHaskell
$(label "getLength")
$(label "getWidth")
$(label "incr")
$(label "lengthenBy")
$(label "setLength")
$(label "setWidth")
$(label "show'")
rectangle length width self
= do
lengthRef <- newIORef length :: IO (IORef Int)
widthRef <- newIORef width :: IO (IORef Int)
return $
getLength .=. readIORef lengthRef
.*. getWidth .=. readIORef widthRef
.*. setLength .=. writeIORef lengthRef
.*. setWidth .=. writeIORef widthRef
.*. lengthenBy …Run Code Online (Sandbox Code Playgroud) 我有一个双号,我想只打印这个号码的组成部分.我试图用它打印但是我System.out.printf得到了IllegalFormatConversionException.我尝试过类似的东西:
A()
{
double x;
//calculate double
System.out.println("%d",x);
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以简单地使用它打印,System.out.print但也会打印小数部分.我该怎么办printf?
这段代码报告了三个misra c错误:
原始代码是:
#define Wait(a, b) \
if (READ(b+0x1U)) \
{ \
while ((a & Write(b))) \
{ \
/* Do nothing - Busy wait */ \
} \
}
Here READ(b) is a macro and Write(b) is a function with no Misra C error.
Run Code Online (Sandbox Code Playgroud)
我试图更改它以消除错误
#define Wait(a, b) \
if ((uint32_t)0U != READ((b)+0x1U)) \
{ \
while ((uint32_t)0U != ((uint32_t)(a) & Write((uint32_t)(b)))) \
{ \
/* Do nothing - Busy wait */ \
} \
} …Run Code Online (Sandbox Code Playgroud) 我是Java语言的新手,无法理解此程序中finally块的行为.该程序应在打印BC后退出,而它正在打印BCD.请帮忙.
class Main
{
public static void main(String [] args)
{
try
{
badMethod();
System.out.print("A");
}
catch (Exception ex)
{
System.out.print("B");
}
finally
{
System.out.print("C");
}
System.out.print("D");
}
public static void badMethod() throws Exception
{
throw new Exception(); /* Line 22 */
}
}
Run Code Online (Sandbox Code Playgroud)