我是Haskell的新手,如果几个布尔值为true,我将尝试执行多个语句。我使用了警卫队尝试了它,但它只执行了第一条正确的语句,然后停止了。我希望它执行所有正确的示例,例如f 5执行gx,然后还执行h x。我尝试使用if语句,但不能。
f x
| x < 10 = g x
| x < 15 = h x
| otherwise = m x
Run Code Online (Sandbox Code Playgroud)
这只是一个简化,实际上我有一个不同的程序。情况不同,我只是想像其他编程语言一样具有多个if语句。因此,在此示例中,如果x <10,则执行某项操作;如果x <15,则也执行此操作。
我有这种类型
type Card = (CardValue,Suite)
Run Code Online (Sandbox Code Playgroud)
我想写一个函数来显示基于Card.Suite值的颜色
colour :: Card -> Colour
colour card = if card.Suite == Spades then Red else Black
Run Code Online (Sandbox Code Playgroud)
这段代码仅说明了我想要实现的目标。我不知道如何从中真正获得套间价值Card(CardValue,Suite)。
我正在按照本指南创建列表推导。
data Value = Two|Three|Four|Five|Six|Seven|Eight|Nine|Ten|J|Q|K|A
deriving (Eq, Ord, Enum)
data Suite = Hearts | Spades | Diamonds | Clubs
deriving (Eq, Ord, Enum)
type Card = (Value, Suite)
pack :: [Card]
pack = [(Value,Suite) | Value <- [Two .. A], Suite <- [Hearts .. Clubs]]
Run Code Online (Sandbox Code Playgroud)
当我创建pack函数时,它总是抛出
error: Data constructor not in scope: Suite :: Suite
我有以下内容,想转换成数据结构。
文本是:
pcp-action:MESSAGE\npcp-channel:apc\:///\npcp-body-type:text\nPUBLIC:THISPK\nTOPIC:SEND\n\nHello Foo
Run Code Online (Sandbox Code Playgroud)
我想知道,使用解析器是否有意义。老实说,我看不到Parser在这种情况下使用的意义,因为结构不是BNF像这样,JSON也不是可递归枚举的。
什么时候将文本Parser转换为数据结构有意义?
更新资料
我忘了提及上面的文字是基于以下描述,即在这里https://blogs.sap.com/2015/07/27/specification-of-the-push-channel-protocol-pcp/编写。
看起来,它是基于语法的。
我有树状的结构
class T {
properties:P
children:Seq[T]
}
Run Code Online (Sandbox Code Playgroud)
我希望将它转换为另一个树状结构,其中一些转换应用于属性,并且具有父节点的字段:
class TT {
properties:PP
parent:TT
children:Seq[TT]
}
Run Code Online (Sandbox Code Playgroud)
在功能风格中找不到这样做的方法.你能帮我吗?
特别是@ om-nom-nom难以想象应该做的工作的java代码:
public class Omnomnom {
static class P {
String value;
}
static class PP {
String value;
}
static class T {
P properties;
List<T> children;
}
static class TT {
PP properties;
TT parent;
List<TT> children;
}
static PP transform_P_into_PP(P properties) {
PP result = new PP();
result.value = properties.value + "pff";
return result;
}
public static TT transform_T_into_TT(T node, TT …Run Code Online (Sandbox Code Playgroud) 我在Haskell中进行了练习,我需要创建各种类型.第一种类型称为有限,它定义如下:
type Finite a = [a]
Run Code Online (Sandbox Code Playgroud)
然后我需要返回一个像这样定义的单例
singleF :: a -> Finite a
Run Code Online (Sandbox Code Playgroud)
所以我这样实现它:
single n = [n]
Run Code Online (Sandbox Code Playgroud)
然后我创建另一种类型
type Enumeration a = Int -> Finite a
Run Code Online (Sandbox Code Playgroud)
然后我需要重新实现单例函数
singleE :: a -> Enumeration a
Run Code Online (Sandbox Code Playgroud)
在我的理解中,类型Enumeration是从Int到类型列表的函数的同义词a,但我无法理解我是如何实现它的.
从锻炼(以前的类型"有限"也被称为"桶"): An enumeration is an infinite sequence of finite buckets, indexed by natural numbers.
而函数是:I suggest for simplicity that you put the sole item in bucket 0,所以我认为int是枚举中桶的索引
我正在实现Hutton 编写的Haskell编程中的算术表达式树示例,我得到一个语法错误:
解析错误(可能是错误的缩进或括号不匹配)
firstgrm = do t <- secgrm
( do { symbol "##";
o <- firstgrm;
return (O (t ## o));}
+++ return t ) -- parse error here
Run Code Online (Sandbox Code Playgroud) 我懂了:
type ID = Int
data Bank = Bank [(ID, Account)] deriving Show
data Account = Account
{ balance :: Int
, owner :: Client
} deriving Show
data Client = Client
{ name :: String
, surname :: String
, address :: String
} deriving Show
Run Code Online (Sandbox Code Playgroud)
我的任务是,编写一个函数credit :: Int -> ID -> Bank -> Bank
,将指定金额的Money添加到指定金额的帐户.我不知道我怎么能这样做,因为这些是数据类型..
我有一个任务来生成一个列表,其中也可以包含字符串和整数.如何在Haskell中解决这个问题?