(不過我覺得很好玩就是)
所以類似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。
沒有留言:
張貼留言