Syntax 基本haskell控制语句-始终可以运行的语句?
如果我想做以下事情:Syntax 基本haskell控制语句-始终可以运行的语句?,syntax,haskell,controls,Syntax,Haskell,Controls,如果我想做以下事情: function1 stuff | condition1 = "yay" | condition2 = "hey" | condition3 = "nay" 我想要一个总是无条件运行的语句(例如“因为”),我怎么能这样做呢?字符串是占位符 谢谢 编辑: 在我放弃之前,我想试着根据手头的问题重新表述一下 我有一个函数,它接受两个输入(列表列表) 如果给定的示例输入为[[]][[[]]、[[[]]](或[[]][[[“x”]]、[[]]),我想 测试每侧是否存在偶数的
function1 stuff
| condition1 = "yay"
| condition2 = "hey"
| condition3 = "nay"
我想要一个总是无条件运行的语句(例如“因为”),我怎么能这样做呢?字符串是占位符
谢谢
编辑:
在我放弃之前,我想试着根据手头的问题重新表述一下
我有一个函数,它接受两个输入(列表列表)
如果给定的示例输入为[[]][[[]]、[[[]]](或[[]][[[“x”]]、[[]]),我想
- 测试每侧是否存在偶数的[[]],如果存在,则将其全部删除
- 测试每侧的奇数,然后是nub(删除除一个以外的所有)
- 其他一些类似的事情
然后在此之后,将两个输入合并(清理)并返回它们。到目前为止,在尝试了case和if-then-else之后,我已经决定使用一种保护语法。但这只允许我测试一个方面(例如),然后在=符号之后加入并返回。除非它太长了。。。所以承认我还有很多东西要学,我该如何在haskell做这样的事情呢 如果您的意思是如果其他所有条件都失败,那么只需使用
否则
:
foo x
| x == 0 = "yay"
| x == 1 = "hey"
| x >= 2 = "nay"
| otherwise = "negative"
如果你所说的“始终运行”是指其他的东西,即即使另一个也运行,它也会“运行”,那么我认为你对这种语言的想法是错误的。例如,如果我们有语法:
foo x
| x == 1 = "one"
| always = "any"
那么
foo 1的值应该是多少?函数的唯一目的是返回一个值。但是,如果每个条件都有一些共同点,则可以使用where
function1 stuff
| condition1 = "yay" ++ otherstuff
| condition2 = "hey" ++ otherstuff
| condition3 = "nay" ++ otherstuff
where otherstuff = "!"
您的问题并不真正适用于函数式编程语言,例如Haskell。你的第一个问题是,我想,“当我也想做B的时候,我怎么总是在这里做A?”。你的第二个问题类似:“我怎样做A然后做B?”。这些问题对于命令式语言(如OO语言)来说是有意义的,因为您的程序基本上告诉计算机如何进行。然而,在函数式语言中,你说你想计算什么,但这完全取决于编译器如何完成(这是一点盐,但这是一般的想法)
例如,您的第二个问题
number = number * 5
number = number * 2
在命令式语言中,这表示“将名为“number”的内存单元的当前内容更新5次;然后将名为“number”的内存单元的当前内容更新2次”
在函数式编程语言中,这些语句要么是一个错误(您试图定义一个标量“数字”本身),要么是布尔表达式(“数字是否等于数字*5?”)
我能提供的最好的建议是:忘记在函数式编程语言中更新变量的想法,因为你做不到。相反,请考虑始终计算您想要的值。例如,下面是列表长度函数:
length [] = 0 -- The empty list has zero items.
length (x:xs) = 1 + length xs -- The non-empty list (x:xs) has one more item than xs.
希望这能有所帮助。您仍在思考。Haskell中的表达式不会运行,会对其求值并生成一个值。如果你想找出一个常见的子表达式,那么你可以使用where
关键字true,我仍然没有设法让我的头脑围绕haskell思考。但我现在正处于一个项目中,我有一个几乎正确的功能——但需要在警卫完成任务后运行一个声明。我想我得做另一个函数,或者想办法把它包含在“yay/hey”语句中,虽然这会很难看(而且很长……)。关于你的第二个例子,我打算用foo x,x=2*x,|x==1=“one”,不管看起来有多糟糕(逗号表示换行符)…正如已经指出的-我是如此缓慢地开始思考haskell所需要的想法。但我想这只需要练习和时间。是的,这确实有用!