小编Rog*_*ews的帖子

在Haskell中实现函数重载

我正在研究编写类似于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)

然后我想到了一个可以作为构造函数的加载函数.但我不明白如何使用不同数量的参数实现函数重载.请帮忙.谢谢.

haskell

6
推荐指数
2
解决办法
3640
查看次数

在 C++ 中将对象添加到对象数组

有一个对象数组,要向其中添加对象,我尝试以下操作:

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 是对象数组。但是编译器会以这种方式给出错误,!=不允许使用运算符。那么我该如何实现呢?

c++ arrays oop

5
推荐指数
1
解决办法
4万
查看次数

State Monad ExampleProblem

我正在研究这个问题,之前曾问过相关问题.状态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)

我该如何删除此错误?

haskell

4
推荐指数
1
解决办法
749
查看次数

正确的C++文件扩展名

可能重复:
正确的C++代码文件扩展名?.cc vs .cpp
.c vs .cc vs. .cpp vs .hpp vs .h vs .cxx

我在带扩展名的文件中编写了C++代码.cpp,.cc或者.cxx

任何人都可以解释这三者之间有什么区别,哪一种最好(是平台依赖的),为什么?

我目前正在研究cygwin.

c++

4
推荐指数
1
解决办法
8020
查看次数

在Java中将int []数组转换为short []数组

我有一个int数组,我已经为100个元素分配了空间.还有另一个阵列inShort[].我怎样才能转换inInt[]inShort[]

是否有必要分配新的内存,inShort[]或者有一种方法可以投射到inInt[]

int inInt[] = new int[100];
short inShort[];
Run Code Online (Sandbox Code Playgroud)

java arrays

4
推荐指数
1
解决办法
8670
查看次数

使用三重指针将内存分配给3D数组

我必须使用三指针将内存分配给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)

这是正确的做法吗?(我认为我在做的是不正确的.)

c pointers memory-management multidimensional-array

4
推荐指数
1
解决办法
1万
查看次数

OO Haskell中return和returnIO之间的区别

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)

haskell

3
推荐指数
1
解决办法
210
查看次数

用Java打印双倍数字System.out.printf

我有一个双号,我想只打印这个号码的组成部分.我试图用它打印但是我System.out.printf得到了IllegalFormatConversionException.我尝试过类似的东西:

A()
{ 
    double x;
    //calculate double
    System.out.println("%d",x);
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以简单地使用它打印,System.out.print但也会打印小数部分.我该怎么办printf

java

3
推荐指数
1
解决办法
4万
查看次数

宏定义中的Misra C错误

这段代码报告了三个misra c错误:

  1. 不恰当的宏观扩张
  2. 类似函数的宏定义
  3. 没有括号的宏参数

原始代码是:

#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)

c macros misra

3
推荐指数
1
解决办法
3038
查看次数

无法理解Finally Block的行为

我是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)

java exception-handling

2
推荐指数
1
解决办法
238
查看次数