• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Scala
 

Scala

on

  • 4,433 views

Scala

Scala

Statistics

Views

Total Views
4,433
Views on SlideShare
4,191
Embed Views
242

Actions

Likes
2
Downloads
46
Comments
0

9 Embeds 242

http://biwak-agh.blogspot.com 217
http://dev.localhost 15
http://localhost 3
http://www.linkedin.com 2
http://static.slideshare.net 1
http://www.biwak-agh.blogspot.com 1
http://www.slideshare.net 1
http://biwak-agh.blogspot.se 1
https://www.linkedin.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Scala Scala Presentation Transcript

    • Wstęp O języku Przykłady BIWAK Scali czyli Scala w domu i zagrodzie Krzysztof Goj Koło Naukowe Informatyków BIT 3 grudnia 2008 Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady Czym jest Scala – flame Lepsza Java Haskell dla ludzi Ruby, który nie muli Procesy Erlanga na JVM Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady Czym jest Scala – flame Lepsza Java Haskell dla ludzi Ruby, który nie muli Procesy Erlanga na JVM Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady Czym jest Scala – flame Lepsza Java Haskell dla ludzi Ruby, który nie muli Procesy Erlanga na JVM Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady Czym jest Scala – flame Lepsza Java Haskell dla ludzi Ruby, który nie muli Procesy Erlanga na JVM Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady Czym jest Scala Nazwa i logo Obiektowo-funkcyjny język programowania wysokiego poziomu i ogólnego przeznaczenia. Zgodność z Javą, wersja na .NET Elastyczna składnia pozwala na tworzenie DSL-i Stworzona przez Martina Oderskiego (EPFL) http://www.scala-lang.org Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady Czym jest Scala Nazwa i logo Obiektowo-funkcyjny język programowania wysokiego poziomu i ogólnego przeznaczenia. Zgodność z Javą, wersja na .NET Elastyczna składnia pozwala na tworzenie DSL-i Stworzona przez Martina Oderskiego (EPFL) http://www.scala-lang.org Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady Czym jest Scala Nazwa i logo Obiektowo-funkcyjny język programowania wysokiego poziomu i ogólnego przeznaczenia. Zgodność z Javą, wersja na .NET Elastyczna składnia pozwala na tworzenie DSL-i Stworzona przez Martina Oderskiego (EPFL) http://www.scala-lang.org Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady Czym jest Scala Nazwa i logo Obiektowo-funkcyjny język programowania wysokiego poziomu i ogólnego przeznaczenia. Zgodność z Javą, wersja na .NET Elastyczna składnia pozwala na tworzenie DSL-i Stworzona przez Martina Oderskiego (EPFL) http://www.scala-lang.org Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady Czym jest Scala Nazwa i logo Obiektowo-funkcyjny język programowania wysokiego poziomu i ogólnego przeznaczenia. Zgodność z Javą, wersja na .NET Elastyczna składnia pozwala na tworzenie DSL-i Stworzona przez Martina Oderskiego (EPFL) http://www.scala-lang.org Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady Czym jest Scala Nazwa i logo Obiektowo-funkcyjny język programowania wysokiego poziomu i ogólnego przeznaczenia. Zgodność z Javą, wersja na .NET Elastyczna składnia pozwala na tworzenie DSL-i Stworzona przez Martina Oderskiego (EPFL) http://www.scala-lang.org Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” w shellu Najprościej Scalę zmusić do mówienia pisząc w shellu. shell goj@abulafia ∼ % scala Welcome to Scala version 2.7.1.final [...] Type in expressions to have them evaluated. Type :help for more information. scala> println(quot;Hello, World!quot;) Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” w shellu Najprościej Scalę zmusić do mówienia pisząc w shellu. shell goj@abulafia ∼ % scala Welcome to Scala version 2.7.1.final [...] Type in expressions to have them evaluated. Type :help for more information. scala> println(quot;Hello, World!quot;) Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” w shellu Najprościej Scalę zmusić do mówienia pisząc w shellu. shell goj@abulafia ∼ % scala Welcome to Scala version 2.7.1.final [...] Type in expressions to have them evaluated. Type :help for more information. scala> println(quot;Hello, World!quot;) Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” w shellu Najprościej Scalę zmusić do mówienia pisząc w shellu. shell goj@abulafia ∼ % scala Welcome to Scala version 2.7.1.final [...] Type in expressions to have them evaluated. Type :help for more information. scala> println(quot;Hello, World!quot;) Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” w shellu Najprościej Scalę zmusić do mówienia pisząc w shellu. shell goj@abulafia ∼ % scala Welcome to Scala version 2.7.1.final [...] Type in expressions to have them evaluated. Type :help for more information. scala> println(quot;Hello, World!quot;) Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” w shellu Najprościej Scalę zmusić do mówienia pisząc w shellu. shell goj@abulafia ∼ % scala Welcome to Scala version 2.7.1.final [...] Type in expressions to have them evaluated. Type :help for more information. scala> println(quot;Hello, World!quot;) Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako skrypt . . . można też pisać skrypty script.sh #!/bin/sh exec scala quot;$0quot; quot;$¨ !# object HelloWorld { def main(args: Array[String]) { println(quot;Hello, World!quot;) } } HelloWorld.main(args) shell goj@abulafia ∼ % chmod +x script.sh goj@abulafia ∼ % ./script.sh Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako skrypt . . . można też pisać skrypty script.sh #!/bin/sh exec scala quot;$0quot; quot;$¨ !# object HelloWorld { def main(args: Array[String]) { println(quot;Hello, World!quot;) } } HelloWorld.main(args) shell goj@abulafia ∼ % chmod +x script.sh goj@abulafia ∼ % ./script.sh Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako skrypt . . . można też pisać skrypty script.sh #!/bin/sh exec scala quot;$0quot; quot;$¨ !# object HelloWorld { def main(args: Array[String]) { println(quot;Hello, World!quot;) } } HelloWorld.main(args) shell goj@abulafia ∼ % chmod +x script.sh goj@abulafia ∼ % ./script.sh Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako skrypt . . . można też pisać skrypty script.sh #!/bin/sh exec scala quot;$0quot; quot;$¨ !# object HelloWorld { def main(args: Array[String]) { println(quot;Hello, World!quot;) } } HelloWorld.main(args) shell goj@abulafia ∼ % chmod +x script.sh goj@abulafia ∼ % ./script.sh Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako skrypt . . . można też pisać skrypty script.sh #!/bin/sh exec scala quot;$0quot; quot;$¨ !# object HelloWorld { def main(args: Array[String]) { println(quot;Hello, World!quot;) } } HelloWorld.main(args) shell goj@abulafia ∼ % chmod +x script.sh goj@abulafia ∼ % ./script.sh Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako skrypt . . . można też pisać skrypty script.sh #!/bin/sh exec scala quot;$0quot; quot;$¨ !# object HelloWorld { def main(args: Array[String]) { println(quot;Hello, World!quot;) } } HelloWorld.main(args) shell goj@abulafia ∼ % chmod +x script.sh goj@abulafia ∼ % ./script.sh Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako skrypt . . . można też pisać skrypty script.sh #!/bin/sh exec scala quot;$0quot; quot;$¨ !# object HelloWorld { def main(args: Array[String]) { println(quot;Hello, World!quot;) } } HelloWorld.main(args) shell goj@abulafia ∼ % chmod +x script.sh goj@abulafia ∼ % ./script.sh Hello, World! Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Fundamenty programowania funkcyjnego Funkcje to zwykłe obiekty • Można je przekazywać jako argumenty do funkcji • Mogą być zwracane przez inne funkcje • Programujemy składając je na różne sposoby Izolowanie efektów ubocznych • Niezmienność (immutability) • Programujemy tworząc nowe obiekty na podstawie starych, a nie zmieniając istniejące Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Fundamenty programowania funkcyjnego Funkcje to zwykłe obiekty • Można je przekazywać jako argumenty do funkcji • Mogą być zwracane przez inne funkcje • Programujemy składając je na różne sposoby Izolowanie efektów ubocznych • Niezmienność (immutability) • Programujemy tworząc nowe obiekty na podstawie starych, a nie zmieniając istniejące Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Fundamenty programowania funkcyjnego Funkcje to zwykłe obiekty • Można je przekazywać jako argumenty do funkcji • Mogą być zwracane przez inne funkcje • Programujemy składając je na różne sposoby Izolowanie efektów ubocznych • Niezmienność (immutability) • Programujemy tworząc nowe obiekty na podstawie starych, a nie zmieniając istniejące Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Fundamenty programowania funkcyjnego Funkcje to zwykłe obiekty • Można je przekazywać jako argumenty do funkcji • Mogą być zwracane przez inne funkcje • Programujemy składając je na różne sposoby Izolowanie efektów ubocznych • Niezmienność (immutability) • Programujemy tworząc nowe obiekty na podstawie starych, a nie zmieniając istniejące Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Fundamenty programowania funkcyjnego Funkcje to zwykłe obiekty • Można je przekazywać jako argumenty do funkcji • Mogą być zwracane przez inne funkcje • Programujemy składając je na różne sposoby Izolowanie efektów ubocznych • Niezmienność (immutability) • Programujemy tworząc nowe obiekty na podstawie starych, a nie zmieniając istniejące Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Fundamenty programowania funkcyjnego Funkcje to zwykłe obiekty • Można je przekazywać jako argumenty do funkcji • Mogą być zwracane przez inne funkcje • Programujemy składając je na różne sposoby Izolowanie efektów ubocznych • Niezmienność (immutability) • Programujemy tworząc nowe obiekty na podstawie starych, a nie zmieniając istniejące Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Fundamenty programowania funkcyjnego Funkcje to zwykłe obiekty • Można je przekazywać jako argumenty do funkcji • Mogą być zwracane przez inne funkcje • Programujemy składając je na różne sposoby Izolowanie efektów ubocznych • Niezmienność (immutability) • Programujemy tworząc nowe obiekty na podstawie starych, a nie zmieniając istniejące Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Zalety programowania funkcyjnego Skalowalność Zwięzłość Naturalny sposób opisu wielu problemów Jest trędi–dżezi, kul, na topie Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Zalety programowania funkcyjnego Skalowalność Zwięzłość Naturalny sposób opisu wielu problemów Jest trędi–dżezi, kul, na topie Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Zalety programowania funkcyjnego Skalowalność Zwięzłość Naturalny sposób opisu wielu problemów Jest trędi–dżezi, kul, na topie Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Zalety programowania funkcyjnego Skalowalność Zwięzłość Naturalny sposób opisu wielu problemów Jest trędi–dżezi, kul, na topie Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Co to jest DSL? Domain Specific Languages Zewnętrzne (np. Make) Wewnętrzne (np. Rake) Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Co to jest DSL? Domain Specific Languages Zewnętrzne (np. Make) Wewnętrzne (np. Rake) Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Co to jest DSL? Domain Specific Languages Zewnętrzne (np. Make) Wewnętrzne (np. Rake) Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Co to jest DSL? Wewnętrzny DSL w Scali — Specs object helloWorld extends Specification { quot;’Hello, World!’ has 13 charactersquot; in { quot;Hello, World!quot;.size mustEqual 13 } quot;’Hello, World!’ matches /H.*W.*d.?/ regexpquot; in { quot;Hello, World!quot; must beMatching(quot;H.*W.*d.?quot;) } } Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Scala a współbieżność scala.actors scala.concurrent • scala.concurrent.pilib – rachunek π • scala.concurrent.jolib – join calculus • Lock, SyncChannel Scala-STM (poza biblioteką standardową) Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Scala a współbieżność scala.actors scala.concurrent • scala.concurrent.pilib – rachunek π • scala.concurrent.jolib – join calculus • Lock, SyncChannel Scala-STM (poza biblioteką standardową) Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Scala a współbieżność scala.actors scala.concurrent • scala.concurrent.pilib – rachunek π • scala.concurrent.jolib – join calculus • Lock, SyncChannel Scala-STM (poza biblioteką standardową) Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Scala a współbieżność scala.actors scala.concurrent • scala.concurrent.pilib – rachunek π • scala.concurrent.jolib – join calculus • Lock, SyncChannel Scala-STM (poza biblioteką standardową) Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Scala a współbieżność scala.actors scala.concurrent • scala.concurrent.pilib – rachunek π • scala.concurrent.jolib – join calculus • Lock, SyncChannel Scala-STM (poza biblioteką standardową) Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Scala a współbieżność scala.actors scala.concurrent • scala.concurrent.pilib – rachunek π • scala.concurrent.jolib – join calculus • Lock, SyncChannel Scala-STM (poza biblioteką standardową) Krzysztof Goj BIWAK Scali
    • Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne traity pattern matching składnia dla XML-a inferencja typów domknięcia funkcyjne funkcje anonimowe implicit conversions implicit parameters for comprehensions i monady elastyczny system typów Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Przykłady Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Na rozgrzewkę - map Haskell map (1+) [1, 2, 3] Ruby [1, 2, 3].map {|i| i+1} Scheme (Lisp) (map (lambda (n) (1+ n)) ’(1 2 3)) Python [n+1 for n in [1, 2, 3]] Erlang lists:map(fun(N) -> N+1 end, [1, 2, 3]). Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Na rozgrzewkę - map Java import java.util.List; import java.util.ArrayList; import static java.util.Arrays.asList; interface Function<Result, Arg> { public Result execute(Arg arg); } public class MapExample { public static<Result, Arg> List<Result> map(Function<Result, Arg> fn, Iterable<Arg> iter) { List<Result> result = new ArrayList<Result>(); for (Arg i: iter) result.add(fn.execute(i)); return result; } public static void main(String[] args) { map(new Function<Integer, Integer>() { public Integer execute(Integer i) { return i + 1; } }, asList(1, 2, 3)); } } Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Na rozgrzewkę - map Scala object MapExample extends Application { def increase(n: Int): Int = { return n + 1; } Array(1, 2, 3).map(increase); } Scala — którka funkcja object MapExample extends Application { def increase(n: Int): Int = n + 1; Array(1, 2, 3).map(increase); } Scala — inferencja typów object MapExample extends Application { def increase(n: Int) = n + 1; Array(1, 2, 3).map(increase); } Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Na rozgrzewkę - map Scala object MapExample extends Application { def increase(n: Int): Int = { return n + 1; } Array(1, 2, 3).map(increase); } Scala — którka funkcja object MapExample extends Application { def increase(n: Int): Int = n + 1; Array(1, 2, 3).map(increase); } Scala — inferencja typów object MapExample extends Application { def increase(n: Int) = n + 1; Array(1, 2, 3).map(increase); } Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Na rozgrzewkę - map Scala object MapExample extends Application { def increase(n: Int): Int = { return n + 1; } Array(1, 2, 3).map(increase); } Scala — którka funkcja object MapExample extends Application { def increase(n: Int): Int = n + 1; Array(1, 2, 3).map(increase); } Scala — inferencja typów object MapExample extends Application { def increase(n: Int) = n + 1; Array(1, 2, 3).map(increase); } Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Na rozgrzewkę - map to samo, co na poprzednim slajdzie def increase(n: Int) = n + 1; Array(1, 2, 3).map(increase); funkcja anonimowa Array(1, 2, 3).map((n: Int) => n + 1); dalsza inferencja typów Array(1, 2, 3).map(n => n + 1); anonimowy argument Array(1, 2, 3).map(_ + 1); wygodna składnia Array(1, 2, 3) map (_ + 1) Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Na rozgrzewkę - map to samo, co na poprzednim slajdzie def increase(n: Int) = n + 1; Array(1, 2, 3).map(increase); funkcja anonimowa Array(1, 2, 3).map((n: Int) => n + 1); dalsza inferencja typów Array(1, 2, 3).map(n => n + 1); anonimowy argument Array(1, 2, 3).map(_ + 1); wygodna składnia Array(1, 2, 3) map (_ + 1) Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Na rozgrzewkę - map to samo, co na poprzednim slajdzie def increase(n: Int) = n + 1; Array(1, 2, 3).map(increase); funkcja anonimowa Array(1, 2, 3).map((n: Int) => n + 1); dalsza inferencja typów Array(1, 2, 3).map(n => n + 1); anonimowy argument Array(1, 2, 3).map(_ + 1); wygodna składnia Array(1, 2, 3) map (_ + 1) Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Na rozgrzewkę - map to samo, co na poprzednim slajdzie def increase(n: Int) = n + 1; Array(1, 2, 3).map(increase); funkcja anonimowa Array(1, 2, 3).map((n: Int) => n + 1); dalsza inferencja typów Array(1, 2, 3).map(n => n + 1); anonimowy argument Array(1, 2, 3).map(_ + 1); wygodna składnia Array(1, 2, 3) map (_ + 1) Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Na rozgrzewkę - map to samo, co na poprzednim slajdzie def increase(n: Int) = n + 1; Array(1, 2, 3).map(increase); funkcja anonimowa Array(1, 2, 3).map((n: Int) => n + 1); dalsza inferencja typów Array(1, 2, 3).map(n => n + 1); anonimowy argument Array(1, 2, 3).map(_ + 1); wygodna składnia Array(1, 2, 3) map (_ + 1) Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające takaSkładnia.setJestBrzydka(true) Settery i gettery class DateError extends Exception class TimeOfDayVar { private var h, m, s: Int = 0 def hours = h def hours_= (h: Int) = if (0 <= h && h < 24) this.h = h else throw new DateError() // ... } def main(args: Array[String]) { val d = new TimeOfDayVar d.hours = 8; d.minutes = 30; d.seconds = 0 d.hours = 25 // throws a DateError exception } Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Implicit Conversions silnia def fact(n: Int): BigInt = if (n > 0) BigInt(n) * fact(n-1) else 1 implicit def enrich(n: Int) = new { def !(): BigInt = fact(n) } println(42!) 1405006117752879898543142606244511569936384000000000 Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Implicit Conversions silnia def fact(n: Int): BigInt = if (n > 0) BigInt(n) * fact(n-1) else 1 implicit def enrich(n: Int) = new { def !(): BigInt = fact(n) } println(42!) 1405006117752879898543142606244511569936384000000000 Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające For Comprehensions sprytne pętle for (i <- 1 to 100 by 7) println(i) for (i <- 1 to 100 by 7 if i % 3 == 0) println(i) val numbers = for (i <- 1 to 100 by 7 if i % 3 == 0) yield i-1 odcukrzamy (1).to(100).by(7).foreach(println) (1).to(100).by(7).filter(_ % 3 == 0).foreach(println) val numbers = (1).to(100).by(7).filter(_ % 3 == 0).map(_-1) Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające For Comprehensions sprytne pętle for (i <- 1 to 100 by 7) println(i) for (i <- 1 to 100 by 7 if i % 3 == 0) println(i) val numbers = for (i <- 1 to 100 by 7 if i % 3 == 0) yield i-1 odcukrzamy (1).to(100).by(7).foreach(println) (1).to(100).by(7).filter(_ % 3 == 0).foreach(println) val numbers = (1).to(100).by(7).filter(_ % 3 == 0).map(_-1) Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające For Comprehensions sprytne pętle for (i <- 1 to 100 by 7) println(i) for (i <- 1 to 100 by 7 if i % 3 == 0) println(i) val numbers = for (i <- 1 to 100 by 7 if i % 3 == 0) yield i-1 odcukrzamy (1).to(100).by(7).foreach(println) (1).to(100).by(7).filter(_ % 3 == 0).foreach(println) val numbers = (1).to(100).by(7).filter(_ % 3 == 0).map(_-1) Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające For Comprehensions sprytne pętle for (i <- 1 to 100 by 7) println(i) for (i <- 1 to 100 by 7 if i % 3 == 0) println(i) val numbers = for (i <- 1 to 100 by 7 if i % 3 == 0) yield i-1 odcukrzamy (1).to(100).by(7).foreach(println) (1).to(100).by(7).filter(_ % 3 == 0).foreach(println) val numbers = (1).to(100).by(7).filter(_ % 3 == 0).map(_-1) Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Opcje Opcje import scala.collection.mutable.HashMap val numbers = HashMap(0 -> quot;nicquot;, 1 -> quot;jednoquot;, 2 -> quot;dwaquot;) val rnd = new Random numbers get rnd.nextInt(7) match { case Some(name) => println(quot;To quot; + name) case None => println(quot;Dużoquot;) } println(numbers get rnd.nextInt(7) map {_.capitalize + quot;!quot;} getOrElse quot;DUŻO!!!quot;) Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające ScalaCheck — QuickCheck i więcej ScalaCheck import org.scalacheck._ object StringSpecification extends Properties(quot;Stringquot;) { specify(quot;startsWithquot;, (a: String, b: String) => (a+b).startsWith(a)) specify(quot;endsWithquot;, (a: String, b: String) => (a+b).endsWith(b)) // Is this really always true? specify(quot;concatquot;, (a: String, b: String) => (a+b).length > a.length && (a+b).length > b.length ) specify(quot;substringquot;, (a: String, b: String) => (a+b).substring(a.length) == b ) specify(quot;substringquot;, (a: String, b: String, c: String) => (a+b+c).substring(a.length, a.length+b.length) == b ) } Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Traity Trait ordered trait Ordered[A] { def compare(that: A): Int def < (that: A): Boolean = (this compare that) < 0 def > (that: A): Boolean = (this compare that) > 0 def <= (that: A): Boolean = (this compare that) <= 0 def >= (that: A): Boolean = (this compare that) >= 0 def compareTo(that: A): Int = compare(that) } Użycie class Sth(val a: Int) extends Ordered[Sth] { override def compare(other: Sth) = { val b = other.a (a*a) compare (b*b) } } val rnd = new Random println(if (new Sth(-3) < new Sth(rnd nextInt 5)) quot;Yesquot; else quot;Noquot;) Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Traity Trait ordered trait Ordered[A] { def compare(that: A): Int def < (that: A): Boolean = (this compare that) < 0 def > (that: A): Boolean = (this compare that) > 0 def <= (that: A): Boolean = (this compare that) <= 0 def >= (that: A): Boolean = (this compare that) >= 0 def compareTo(that: A): Int = compare(that) } Użycie class Sth(val a: Int) extends Ordered[Sth] { override def compare(other: Sth) = { val b = other.a (a*a) compare (b*b) } } val rnd = new Random println(if (new Sth(-3) < new Sth(rnd nextInt 5)) quot;Yesquot; else quot;Noquot;) Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Domknięcia Zapis var counter = 0 def bump_up() { counter += 1 } Odczyt def outer(a: Int): Int = { def helper(b: Int) = a * a - b helper(4) + helper(a-1) } Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Domknięcia Zapis var counter = 0 def bump_up() { counter += 1 } Odczyt def outer(a: Int): Int = { def helper(b: Int) = a * a - b helper(4) + helper(a-1) } Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Domknięcia Licznik — patologicznik def mkCounter() = { var soFar = 0 def counter(n: Int) = { soFar += n soFar } counter _ } val cnt1 = mkCounter() val cnt2 = mkCounter() cnt1(1); cnt1(30) println(cnt1(11)) println(cnt2(7)) wypisze 42 i 7 Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające XML – tworzenie XML case class Person(name: String, age: Int) class AddressBook(a: Person*) { private val people: List[Person] = a.toList def toXHTML = <table class=quot;XMLquot;> <tr> <th>Last Name</th> <th>First Name</th> </tr> { for (val p <- people) yield <tr> <td>{ p.name }</td> <td>{ p.age.toString }</td> </tr> } </table>; } Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające XML – wyszukiwanie 1/3 XML def understandFakt(note: scala.xml.Node): String = note match { case <murder> <criminal> <name>{murdererName}</name> <age>{murderAge}</age> </criminal> <victim><name>{victimName}</name>{_*}</victim> </murder> => quot;ZBRODNIA! quot; + murderAge + quot;-letni quot; + murderAge + quot; zabił quot; + quot; quot; + victimName case <advert>{content}</advert> => quot;Kupuj quot; + content case _ => quot;prognoza pogody: będzie padaćquot; } Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające XML – wyszukiwanie 2/3 XML val stuff = <badStuff> <newspapers> <newspaper title=quot;Nasz Dziennikquot;>...</newspaper> <newspaper title=quot;NIEquot;>...</newspaper> <newspaper title=quot;Faktquot;> <frontPage> <advert>Fakt</advert> <pogoda/> </frontPage> </newspaper> </newspapers> </badStuff> Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające XML – wyszukiwanie 3/3 XML for { val paper <- stuff quot;newspapersquot; quot;newspaperquot; paper.attributes(quot;titlequot;) == quot;Faktquot; val frontPage <- paper quot;frontPagequot; val article <- frontPage child } println(understandFakt(article)) Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – definicja class Stack[+A] { def push[B >: A](elem: B): Stack[B] = new Stack[B] { override def top: B = elem override def pop: Stack[B] = Stack.this override def toString() = Stack.this.toString() + quot; quot; + elem.toString() } def top: A = error(quot;no element on stackquot;) def pop: Stack[A] = error(quot;no element on stackquot;) override def toString() = quot;quot; } hierarchia klas Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Hierarchia typów stack.scala Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Funkcja trait Function1[-T1, +R] Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Implicit Parameters Powtórka z algebry abstract class SemiGroup[A] { def add(x: A, y: A): A } abstract class Monoid[A] extends SemiGroup[A] { def unit: A } implicit object StringMonoid extends Monoid[String] { def add(x: String, y: String): String = x concat y def unit: String = quot;quot; } implicit object IntMonoid extends Monoid[int] { def add(x: Int, y: Int): Int = x + y def unit: Int = 0 } def sum[A](xs: List[A])(implicit m: Monoid[A]): A = (m.unit /: xs)(m.add) println(sum(List(1, 2, 3))) println(sum(List(quot;aquot;, quot;bquot;, quot;cquot;))) Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Parser Combinators Prosty Kalkulator import scala.util.parsing.combinator.lexical.StdLexical import scala.util.parsing.combinator.syntactical.StdTokenParsers object arithmeticParser extends StdTokenParsers { type Tokens = StdLexical ; val lexical = new StdLexical lexical.delimiters ++= List(quot;(quot;, quot;)quot;, quot;+quot;, quot;-quot;, quot;*quot;, quot;/quot;) lazy val expr = term*(quot;+quot; ^^^ {(x: Int, y: Int) => x + y} | quot;-quot; ^^^ {(x: Int, y: Int) => x - y}) lazy val term = factor*(quot;*quot; ^^^ {(x: Int, y: Int) => x * y} | quot;/quot; ^^^ {(x: Int, y: Int) => x / y}) lazy val factor: Parser[Int] = quot;(quot; ~> expr <~ quot;)quot; | numericLit ^^ (_.toInt) def eval(str: String) = expr(new lexical.Scanner(str)) } println(arithmeticParser.eval(quot;4 * (5+5) + 8/4quot;).get) Krzysztof Goj BIWAK Scali
    • Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Parser Combinators Prosty Kalkulator import scala.util.parsing.combinator.lexical.StdLexical import scala.util.parsing.combinator.syntactical.StdTokenParsers object arithmeticParser extends StdTokenParsers { type Tokens = StdLexical ; val lexical = new StdLexical lexical.delimiters ++= List(quot;(quot;, quot;)quot;, quot;+quot;, quot;-quot;, quot;*quot;, quot;/quot;) lazy val expr = term*(quot;+quot; ^^^ {(x: Int, y: Int) => x + y} | quot;-quot; ^^^ {(x: Int, y: Int) => x - y}) lazy val term = factor*(quot;*quot; ^^^ {(x: Int, y: Int) => x * y} | quot;/quot; ^^^ {(x: Int, y: Int) => x / y}) lazy val factor: Parser[Int] = quot;(quot; ~> expr <~ quot;)quot; | numericLit ^^ (_.toInt) def eval(str: String) = expr(new lexical.Scanner(str)) } println(arithmeticParser.eval(quot;4 * (5+5) + 8/4quot;).get) Krzysztof Goj BIWAK Scali
    • Do poczytania Zakończenie Dziękuję Do poczytania http://www.scala-lang.org Blog Martina Oderskiego Blog Daniela Spiewaka Blog Jamesa Iry-ego http://scala-blogs.org/ #scala na freenode Slajdy (z linkami) będą na http://biwak-agh.blogspot.com/ Krzysztof Goj BIWAK Scali
    • Do poczytania Zakończenie Dziękuję Do poczytania http://www.scala-lang.org Blog Martina Oderskiego Blog Daniela Spiewaka Blog Jamesa Iry-ego http://scala-blogs.org/ #scala na freenode Slajdy (z linkami) będą na http://biwak-agh.blogspot.com/ Krzysztof Goj BIWAK Scali
    • Do poczytania Zakończenie Dziękuję Do poczytania http://www.scala-lang.org Blog Martina Oderskiego Blog Daniela Spiewaka Blog Jamesa Iry-ego http://scala-blogs.org/ #scala na freenode Slajdy (z linkami) będą na http://biwak-agh.blogspot.com/ Krzysztof Goj BIWAK Scali
    • Do poczytania Zakończenie Dziękuję Do poczytania http://www.scala-lang.org Blog Martina Oderskiego Blog Daniela Spiewaka Blog Jamesa Iry-ego http://scala-blogs.org/ #scala na freenode Slajdy (z linkami) będą na http://biwak-agh.blogspot.com/ Krzysztof Goj BIWAK Scali
    • Do poczytania Zakończenie Dziękuję Do poczytania http://www.scala-lang.org Blog Martina Oderskiego Blog Daniela Spiewaka Blog Jamesa Iry-ego http://scala-blogs.org/ #scala na freenode Slajdy (z linkami) będą na http://biwak-agh.blogspot.com/ Krzysztof Goj BIWAK Scali
    • Do poczytania Zakończenie Dziękuję Do poczytania http://www.scala-lang.org Blog Martina Oderskiego Blog Daniela Spiewaka Blog Jamesa Iry-ego http://scala-blogs.org/ #scala na freenode Slajdy (z linkami) będą na http://biwak-agh.blogspot.com/ Krzysztof Goj BIWAK Scali
    • Do poczytania Zakończenie Dziękuję Do poczytania http://www.scala-lang.org Blog Martina Oderskiego Blog Daniela Spiewaka Blog Jamesa Iry-ego http://scala-blogs.org/ #scala na freenode Slajdy (z linkami) będą na http://biwak-agh.blogspot.com/ Krzysztof Goj BIWAK Scali
    • Do poczytania Zakończenie Dziękuję Dobranoc! Krzysztof Goj BIWAK Scali