小编Kha*_*aab的帖子

如何检查haskell中的类型

我不知道如何检查haskell中的变量类型,我的意思是,当我从控制台读取内容时getLine,但我希望它是一个整数但用户也可以输入一个字符串,然后我不想要我的程序坠毁.例如,如果有人输入一个字符串,我尝试将其转换为Int然后它将崩溃(异常)所以我想检查它是否可转换.我怎么做 ?谢谢你的帮助 :)

 main1 = do
        let g <- getLine
            k = g :: Int 
            if(k :: Int)
                then ........ 
Run Code Online (Sandbox Code Playgroud)

haskell

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

为什么prolog使用最通用的统一者而不是简单的统一者

Prolog使用最通用的统一器而不仅仅是统一器,为什么会这样?

如果我没错,那么我认为,因为Prolog是基于回溯的,如果我们不使用大多数通用的统一者,那么我们会错过变量统一的某些组合吗?

prolog

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

C++ 中不允许使用限定名称

我是 C++ 的初学者,必须从事一个项目。提供了以下代码(头文件),当我导入它时,我收到命名空间 Utils 的错误。

 namespace Utils::iterators {

  struct RetrieveKey {
    template<typename T>
      typename T::first_type operator()(T keyValuePair) const {
        return keyValuePair.first;
      }
  };
Run Code Online (Sandbox Code Playgroud)

错误是。

 "qualified name is not allowed".
Run Code Online (Sandbox Code Playgroud)

我只导入了 boost 库。

我已经忙了几个小时的这些错误,如果有人能告诉我这个错误的可能原因是什么,那将是一个很大的帮助。

c++

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

Prolog统一和优化

我想编写合并两个列表的合并函数,我可以通过编写两个(合并)谓词来做到这一点,其中一个是元素H1 = <H2,另一个是H1> H2但是我想写if-the-else条件但是然后统一失败,我不知道该怎么做.这是我的代码:

merge([H1|T1],[H2|T2],List):-
  (
   H1 =< H2 ->
        NewList = [H1|List],
        merge(T1,[H2|T2],NewList)
  ;
        NewList = [H2|List],
        merge([H1|T1],T2,NewList)
  ).

merge([],L,L).
merge(L,[],L).
Run Code Online (Sandbox Code Playgroud)

我知道问题是什么,如果我写两个合并谓词,我可以避免它,但我不知道如何在这里做,我被困:(

模式匹配在这里失败: 图片

merge list prolog

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

列出作为节目的实例

无论如何都要检查列表是如何Show类的实例.我有这样的数据类型:

data Graph a = Graph [a]我想让它成为一个实例,Show这样当我可以调用show函数时,我只得到列表,而不是单词Graph.

我试过这个,但我知道这不起作用,因为show返回一个字符串,x是一个列表.我正在学习如何学习你的好处.没有例子,我也无法在互联网上找到任何一个.

instance Show (Graph a) where
    show (Graph x) = x
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到这个结果?

haskell

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

让block给出缩进错误

我知道缩进错误是什么,但我不知道为什么我在这里得到这个错误,而每个都是对齐的,试图解决它2个小时.

Account.hs:40:25: error:
    parse error (possibly incorrect indentation or mismatched brackets)
   |
40 |                         let amount = readLn :: IO Int
   |                         ^
Failed, 0 modules loaded.
Run Code Online (Sandbox Code Playgroud)
main = do
            putStrLn $ "Press one to create a new account"
            let g = getLine
                enteredValue = read g :: Int
            if g == 1
                then do putStrLn $ "Enter your name "
                        let name = getLine
                            putStrLn $ "Enter the initial amount"
                            let amount = readLn :: IO Int
                                value  = …
Run Code Online (Sandbox Code Playgroud)

haskell

0
推荐指数
1
解决办法
68
查看次数

如何使newtype成为monad的一个实例

我被困在这里,我可以制作data类型实例,Monad但我无法弄清楚我是如何做到的newtype.

newtype Val a = Val {getVal :: [a]} deriving (Show)

instance Monad Val where
    return = Val
    (>>=) (Val {getVal = l}) f  = map f l
Run Code Online (Sandbox Code Playgroud)

如果我这样写:

instance Monad Val where
return = Val
(>>=) (Val {getVal = l}) f  =  {getVal = map f l}
Run Code Online (Sandbox Code Playgroud)

然后我得到错误,它说parse error on input { .

我如何制作newtypeMonad的实例?

haskell

-1
推荐指数
1
解决办法
259
查看次数

函数应用于haskell中的参数太少

我刚开始学习haskell而且我无法解决这个问题.有人能告诉我为什么我得到的错误g应用于下面的代码中太少的参数.

f :: Int -> Int
f first  = 5+first

g :: Int -> Int -> Int
g  first second = first+second


compute :: (Int -> Int) -> (Int -> Int -> Int) -> Int -> Int -> Int
compute f g x y = (f . g) x y
Run Code Online (Sandbox Code Playgroud)

haskell

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

标签 统计

haskell ×5

prolog ×2

c++ ×1

list ×1

merge ×1