我不知道如何检查haskell中的变量类型,我的意思是,当我从控制台读取内容时getLine,但我希望它是一个整数但用户也可以输入一个字符串,然后我不想要我的程序坠毁.例如,如果有人输入一个字符串,我尝试将其转换为Int然后它将崩溃(异常)所以我想检查它是否可转换.我怎么做 ?谢谢你的帮助 :)
main1 = do
let g <- getLine
k = g :: Int
if(k :: Int)
then ........
Run Code Online (Sandbox Code Playgroud) Prolog使用最通用的统一器而不仅仅是统一器,为什么会这样?
如果我没错,那么我认为,因为Prolog是基于回溯的,如果我们不使用大多数通用的统一者,那么我们会错过变量统一的某些组合吗?
我是 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 库。
我已经忙了几个小时的这些错误,如果有人能告诉我这个错误的可能原因是什么,那将是一个很大的帮助。
我想编写合并两个列表的合并函数,我可以通过编写两个(合并)谓词来做到这一点,其中一个是元素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)
我知道问题是什么,如果我写两个合并谓词,我可以避免它,但我不知道如何在这里做,我被困:(
模式匹配在这里失败:

无论如何都要检查列表是如何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)
我怎样才能得到这个结果?
我知道缩进错误是什么,但我不知道为什么我在这里得到这个错误,而每个都是对齐的,试图解决它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) 我被困在这里,我可以制作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而且我无法解决这个问题.有人能告诉我为什么我得到的错误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)