spark 0.8 david morley, nov 2005. core data types includes values most often used by spark primitive...

15
SPARK 0.8 David Morley, Nov 2005

Upload: kerry-jefferson

Post on 16-Dec-2015

220 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: SPARK 0.8 David Morley, Nov 2005. Core Data Types Includes values most often used by SPARK Primitive –Integer, e.g. 1 –Float, e.g., 1.0 –String, e.g.,

SPARK 0.8

David Morley, Nov 2005

Page 2: SPARK 0.8 David Morley, Nov 2005. Core Data Types Includes values most often used by SPARK Primitive –Integer, e.g. 1 –Float, e.g., 1.0 –String, e.g.,

Core Data Types

• Includes values most often used by SPARK• Primitive

– Integer, e.g. 1– Float, e.g., 1.0– String, e.g., “one”– Symbol, e.g., one– Variable designator, e.g., $var (new in 0.8)

• Compound– Structure, e.g., (foo 1 2 3) - has functor symbol foo– List, e.g., [1 2 3]

Page 3: SPARK 0.8 David Morley, Nov 2005. Core Data Types Includes values most often used by SPARK Primitive –Integer, e.g. 1 –Float, e.g., 1.0 –String, e.g.,

SPARK-L Source

• Represented by core data values (cf. Lisp, Prolog)

• SPARKL source to generate a value usually different from the value:– (+ 1 2) 3, ⇒ (- 4 1) 3, ⇒ 3 3⇒– [(+ 1 2) 3] [3 3]⇒– (@ “one”) one⇒– (@@ “foo” 1 2 3) (foo 1 2 3)⇒– (@@ “bar” (+ 1 1) (+ 2 2)) (bar 2 4)⇒

Page 4: SPARK 0.8 David Morley, Nov 2005. Core Data Types Includes values most often used by SPARK Primitive –Integer, e.g. 1 –Float, e.g., 1.0 –String, e.g.,

Backquote and comma

• Used for easy construction of basic values (cf. Lisp)

• Backquote ` prevents evaluation– `one one⇒– `(foo 1 2 3) (foo 1 2 3)⇒

• Comma , performs evaluation within backquote– `(bar ,(+ 1 1) ,(+ 2 2)) (bar 2 4)⇒

Page 5: SPARK 0.8 David Morley, Nov 2005. Core Data Types Includes values most often used by SPARK Primitive –Integer, e.g. 1 –Float, e.g., 1.0 –String, e.g.,

File

• Contains– Package statement– Identifier declarations– Import statements– Export statements– Require statements– Facts to be loaded

• Every identifier (unquoted symbol or functor) used in the file must have a visible declaration.– Declarations in the file are visible– Imported declarations are visible– Any declaration visible to the package is visible

Page 6: SPARK 0.8 David Morley, Nov 2005. Core Data Types Includes values most often used by SPARK Primitive –Integer, e.g. 1 –Float, e.g., 1.0 –String, e.g.,

Package

• A Package is– A “bucket” that accumulates declarations, imports,

exports from files– A means of communicating declarations between files

• Files can use identifiers from their package• Files import identifiers from other packages into their package• Files export identifiers from their package

• Unlike old concept of module:– Not a fixed set of files– New files can add identifiers to a package

Page 7: SPARK 0.8 David Morley, Nov 2005. Core Data Types Includes values most often used by SPARK Primitive –Integer, e.g. 1 –Float, e.g., 1.0 –String, e.g.,

Specifying the Package of a File

• “package: P”• For backward compatibility:

– “module: P” = “package: P”– If no package statement, package = filename

Page 8: SPARK 0.8 David Morley, Nov 2005. Core Data Types Includes values most often used by SPARK Primitive –Integer, e.g. 1 –Float, e.g., 1.0 –String, e.g.,

File-Local Names

• Not all declarations are shared with the package

• Identifiers starting with underscore are only visible in the file– _foo, _LocalPredicate, _Procedure1

• It is conceivable (but no syntax exists) to import an identifier foo as a different identifer _foo. That import would not be visible to the package.

Page 9: SPARK 0.8 David Morley, Nov 2005. Core Data Types Includes values most often used by SPARK Primitive –Integer, e.g. 1 –Float, e.g., 1.0 –String, e.g.,

Identifiers and Symbols• Identifers are local names

– interpreted with respect to a file

• To distinguish identifiers in different files we associate a symbol with every identifier:For identifiers declared in file F in package P:– Id maps to symbol P.Id– _Id maps to symbol F._Id

• When an identifier declared as a functor appears instead as a symbol, it evaluates to the corresponding symbol:– Given {defpredicate (Id $x)} {defpredicate (_Id $y)}– Id P.Id, ⇒ _Id F._Id (cf. ⇒ `Id Id and ⇒ `_Id _Id)⇒– Useful for passing as an argument to applyfun, etc.– Less need for “(qent Id)”

Page 10: SPARK 0.8 David Morley, Nov 2005. Core Data Types Includes values most often used by SPARK Primitive –Integer, e.g. 1 –Float, e.g., 1.0 –String, e.g.,

Importing from a package

• Q. When you say “importfrom: P” which files do you get declarations from?

• Ans. All files in the transitive closure of the “requires” relation that are in package P.– F requires F’ if F contains requires: F’– F requires P if F contains importfrom: P …– F requires P if F is in package P– P requires F if F has the same name as P

Page 11: SPARK 0.8 David Morley, Nov 2005. Core Data Types Includes values most often used by SPARK Primitive –Integer, e.g. 1 –Float, e.g., 1.0 –String, e.g.,

Usage

• SPARKL source expressions can be used in different ways

• Each way designated by a usage character:+ evaluate term [set: $x (+ 1 2)]- match term (= [$x $y] [1 2])s solve predicate [context: (P $x) ]u update predicate [conclude: (P 7) ]r retract predicate [retract: (P 4) ]…

• SPARKL source processing assigns a usage to each expression in source

Page 12: SPARK 0.8 David Morley, Nov 2005. Core Data Types Includes values most often used by SPARK Primitive –Integer, e.g. 1 –Float, e.g., 1.0 –String, e.g.,

Mode declaration for a functor

• Specifies argument usages• Used for static mode checking of

action/predicate usages before file is loaded• Prefix inputs with “+”, outputs with “-”

– {defaction (act +$x $y -$z)}

In any use of this action:• $x must be evaluable (I.e., is an input)• $y need only be matchable (I.e., can be an output)• $z must not be evaluable (I.e, must be output)

Page 13: SPARK 0.8 David Morley, Nov 2005. Core Data Types Includes values most often used by SPARK Primitive –Integer, e.g. 1 –Float, e.g., 1.0 –String, e.g.,

Formal parameters• Richer formal parameters for:

– defprocedure cues– task closure parameters– pred closure parameters

• Parameter may be one of:– +X - at start, match X to the actual parameter value– -X - at end, match actual parameter to the value of X– $x - at start, constrain $x to match actual parameter

• Examples:– +[$x $y] - match input parameter to [$x $y]

• Less need for Ground

Page 14: SPARK 0.8 David Morley, Nov 2005. Core Data Types Includes values most often used by SPARK Primitive –Integer, e.g. 1 –Float, e.g., 1.0 –String, e.g.,

Accessing Core Valuesfrom Python

• See Python module spark.internal.parse.basicvalues• Core data types are called: String, Float, Integer, Symbol,

Variable, Structure, List– Symbol(“foo”), List((1,2,3)), isinstance(x,List)

• Structure args/List elements access:– myStruct[0], len(myStrict), myList[1:2]

• Structure functor access:– myStruct.functor

• Symbol name access:– mySym.name or str(mySym)

• Construct Structure:– Structure(functorSym, argsSequence) or functorSym.structure(arg0,

arg1, …)

Page 15: SPARK 0.8 David Morley, Nov 2005. Core Data Types Includes values most often used by SPARK Primitive –Integer, e.g. 1 –Float, e.g., 1.0 –String, e.g.,

Random Bits

• “precondition: X” is now optional

• No distinction between task modifiers and basic tasks– [context: X do: Y] is a special case of using

[…] for sequential composition (technically contiguous: rather than seq: )