code

2017年1月22日 星期日

Erlang筆記5 - Guards, case, if

其實erlang的function如果完全按照寫成pattern matching clauses,那對初學者是很不容易的,因為這根本就是Prolog那種邏輯!

(不過我覺得很好玩就是)

所以類似Scala,Erlang提供了其他的control construct讓人們的日子好過一點。


Guards

這是pattern matching的延伸,加入一些boolean expression幫助matching,使用的是when這個keyword:


第一個clause要matching成功必須也要 X > Y evaluated to true。

另一個例子:

這邊有一個is_integer function,這是built-in function,因為是一個boolean function,所以也可以當作一個guard。上面所有的逗號隔開的 boolean expressions都必須要“同時成立”,因為逗號相當於boolean AND。



case

再來就是提供跟Scala很像的case,有case基本上就不用寫的Prolog一樣了,可以寫得跟Scala完全一樣:



if

這個基本上就完全跟pattern matching沒關係:


注意如果沒有任何Guard被evaluated to true,會有runtime error。所以通常最後一個會放atom true -> expression。


沒有留言:

張貼留言