GHCi中的模式匹配

Igg*_*ggY 9 haskell

在学校练习

我有这个功能

bar :: Float -> Float -> Float
bar x 0 = 0
bar 0 y = 0
bar x y = x * y 
Run Code Online (Sandbox Code Playgroud)

我在GHC中键入它

let bar x 0 = 0; bar 0 y = 0; bar x y = x * y
Run Code Online (Sandbox Code Playgroud)

并评估

bar foo 0
bar 0 foo
Run Code Online (Sandbox Code Playgroud)

我被要求修改吧使用'|' 所以我想做一些像:

let bar x y = | x 0 = 0 | 0 y = 0 | x y = x * y
Run Code Online (Sandbox Code Playgroud)

但在ghci,我得到了

parse error on input '='
Run Code Online (Sandbox Code Playgroud)

我怎么能在GHCi中做到这一点?使用模式匹配('|')的事实会改变吗?

md2*_*rpe 17

查看使用警卫的语法:

bar x y | x == 0     = 0
        | y == 0     = 0
        | otherwise  = x * y
Run Code Online (Sandbox Code Playgroud)

写在GHCi的一行:

let bar x y | x == 0 = 0 | y == 0 = 0 | otherwise = x * y
Run Code Online (Sandbox Code Playgroud)


And*_*ewC 11

使用文件

不要将代码直接输入ghci,除非它真的是一行代码.

将代码保存在名为PatternMatch.hs的文本文件中,并通过键入将其加载到ghci中.

:l PatternMatch.hs
Run Code Online (Sandbox Code Playgroud)

然后,如果您进行更改(并保存),您可以通过键入来重新加载ghci中的文件

:r
Run Code Online (Sandbox Code Playgroud)

或者,你可以在他们所在的练习之后命名你的文件,或者如果它真的是一次性代码,只需要重新安装Temp.hs.

通过在文本文件中保存内容,您可以更轻松地编辑和重用它.

模块

稍后您将使用适当的模块一起收集相关功能,因此他们可以导入到其他程序中.例如,你可以拥有

module UsefulStuff where

pamf = flip fmap
Run Code Online (Sandbox Code Playgroud)

保存在名为UsefulStuff.hs的文件中,然后保存在另一个文件中

import UsefulStuff
Run Code Online (Sandbox Code Playgroud)

然后使用UsefulStuff中的函数.

模块对于你现在正在做的事情来说是过度的,但是获得编辑,保存,重新编译,测试,重复的工作流程,你将从相当多的努力中省去.

  • @ack老实说,我认为,除非他们准备在某些文件中保存一些代码,否则很酷的孩子们将努力构建任何非平凡的东西.如果你提倡你最喜欢的语言,说你不需要保存你的任何工作,我担心你最终会把它作为一种不适合认真开发的玩具语言出售.无论如何,我认为整个评论对话都是偏离主题的. (4认同)
  • @ack我认为你把我误认为是一个关心酷孩子做什么的人,而我实际上只关心帮助人们充分利用我也使用的工具.感谢关于假的垃圾邮件. (3认同)