Writing queries in Lisp, Perl, and Java

Download Report

Transcript Writing queries in Lisp, Perl, and Java

Introduction to LISP
Programming of Pathway Tools
Queries and Updates
Myths and Facts About Lisp
SRI International
Bioinformatics
 Myth:
Lisp runs interpreted only
 Fact: All major Lisp implementations have
compilers
 Myth:
Lisp uses huge amounts of memory
 Fact: Baseline Lisp installation requires 8-10MB
 Myth:
Lisp is complicated
 Fact: Lisp is much simpler and more elegant than
Perl
SRI International
Bioinformatics
LISP and GFP References






Lisp on the web: ALU.org
ANSI Common LISP
 Paul Graham
Common LISP, the Language -- The standard reference
 Guy L. Steele
On Common LISP
 Paul Graham
The Art of the Metaobject Protocol
 Kiczales, Rivieres, Bobrow
Information on writing Pathway Tools queries:
 http://bioinformatics.ai.sri.com/ptools/ptools-resources.html
 http://www.ai.sri.com/pkarp/loop.html
 http://bioinformatics.ai.sri.com/ptools/debugger.html
SRI International
Bioinformatics
Accessing Lisp through the Pathway
Tools
 Starting
Pathway Tools for Lisp work:
 pathway-tools –lisp
 (select-organism :org-id ‘XXX)
 Lisp
expressions can be typed at any time to the
Pathway Tools listener
 Command: (get-slot-value ‘trp ‘common-name) -> “Ltryptophan”
 Invoking

(eco)
the Navigator from Lisp:
LISP Syntax
 Prefix
SRI International
Bioinformatics
notation
 Simple

and clean syntax
Expressions are delimited by parentheses
 The
same syntax is used for programs and for
data
(1 2 3 4 5 10 “10”)
 (a b c d e f)
 (+ 1 2)
 (subseq “abcdefg” 0 2)

SRI International
Bioinformatics
LISP Expressions and Evaluation




(+ 3 4 5)
 ‘+’ is a function
 (+ 3 4 5) is a function call with 3 arguments
Arguments are evaluated:
 Numbers evaluate to themselves
 If any of the args are themselves expressions, they are evaled in the
same way
 (+ 1 (+ 3 4))
The values of the args are passed to the function
Because of prefix notation, variable number of args
 (+) ---> 0
 (+ 1) ---> 1
 (+ 2 3 1 3 4 5 6) ----> 24

(+ (* 3 4) 6) --> 18

Turning off evaluation with Quote
 ’(+ 1 3) ----> (+ 1 3)
LISP Listener



Also called “top level” and “read-eval-print loop”
Expressions typed in listener are evaluated interactively
Uses a three-step process
 Read




SRI International
Bioinformatics
Reader converts elements outside “” and || to uppercase
Evaluate
Print
Useful forms in listener:
 Previous Results: *, **, ***
 DO NOT use in programs
(+ 1 2)
-> 3
(+ 3 *)
-> 6
LISP Data Types
 Usual
types in other languages:
 Numbers -- 2, 312, 1.45, -222e2
 Strings -- “sky”, “this is a lisp intro”
 Characters - #\D, #\space
 Hashtables
 True/False T / NIL
 Fundamental
LISP data types
 Symbols - BLUE, :CONT

Lists - (1 2 3)
(“a” “b” “c”) (“a” 2 “X”)
SRI International
Bioinformatics
Lisp Variables
 Global
SRI International
Bioinformatics
variable values can be set and used during
a session
 Declarations not needed
(setq x 5)
-> 5
x
-> 5
(+ 3 x)
-> 8
(setq y “atgc”)
-> “atgc”
Examples
SRI International
Bioinformatics
(select-organism :org-id ‘ecoli)
-> ECOLI
(setq genes (get-class-all-instances ‘|Genes|))
-> (……………)
(setq monomers (get-class-all-instances
‘|Polypeptides|))
-> (…………….)
(setq genes2 genes)
-> (…………….)
LISP Lists
 Fundamental
SRI International
Bioinformatics
to LISP ::: LISt Processing
 Zero or more elements enclosed by parentheses
 Typing
a list to the listener:
 ’(this is a list) => (THIS IS A LIST)
 Creating a list with functions :
 (list ’so ’is ’this) => (SO IS THIS)
 Examples:
(1 3 5 7), ((2 4 6) 10 (0 8)), ’(1 this T NIL “that”)
 The empty list: nil ()

List Examples
(length genes)
-> 4316
(first genes)
-> XXX
(subseq genes 0 50)
-> (……………)
(nth 3 genes)
-> XXX
SRI International
Bioinformatics
SRI International
Bioinformatics
Functions for Operating on Lists

Length
 (length x)
 Returns the number of elements in the list X

First
 (first x)
 Returns the first element in the list X

Subseq
 (subseq x j k)
 Returns a newly created list containing a subsequence of list X, starting at
element number J and ending before element number K

Nth


(nth j x)
Returns the Jth element of list X (element 0 is the first element)
Defining Functions


Put function definitions in a file
Reload the file when definitions change

(defun <name> (<arguments>)
… code for function …)

Creates a new operation called <name>

Examples:
 (defun square (x)
(* x x))
 (defun message ()
(print “Hello”))
 (defun test-fn ()
1 2 3 4)
SRI International
Bioinformatics
Arglist Keywords




SRI International
Bioinformatics
Are markers in arglist
Not themselves argument names, but flag that following
arguments are different somehow
Most common are:
 &optional
 &rest
 &key
Examples:
 (defun plus5 (x &optional (y 5)) (+ x y) )
 (plus5 3) ==> 8
(plus5 4 4) ==> 8

(defun embed (x &key (y “<<<“) (z “>>>”)) (concatenate ‘string y x z) )
(embed “foo” :z “]]]”) ==> “<<<foo]]]”

(defun listall (&rest rest-of-args) (sort (copy-seq rest-of-args) #’<))

Problems
 all-substrates
 enzymes-of-reaction
 genes-of-reaction
 genes-of-pathway
 monomers-of-protein
 genes-of-enzyme
SRI International
Bioinformatics
Example Session
SRI International
Bioinformatics
(setq x ‘trp)
=> trp
(get-slot-value x ‘common-name)
=> “L-tryptophan”
(setq aas (get-class-all-instances ‘|Amino-Acids|))
=> (……..)
(loop for x in aas count x)
=> 20
Example Session
SRI International
Bioinformatics
(loop for x in genes
for name = (get-slot-value x ‘common-name)
when (and name (search “trp” name))
collect x))
-> (…)
(setq rxns (get-class-all-instances ‘|Reactions|))
-> (…)
(loop for x in rxns
when (member-slot-value-p x ‘substrates ‘trp)
collect x)
-> (…)
(replace-answer-list *)