Jess (programmeringsspråk)

Jess
Utvecklare Sandia National Laboratories
Stabil frisättning
7.1p2 / 5 november 2008 ; för 14 år sedan ( 2008-11-05 )
Plattform Java
Licens Stängd källa / Public Domain
Hemsida www.jessrules.com

Jess är en regelmotor för Java- plattformen som utvecklades av Ernest Friedman-Hill från Sandia National Labs . Det är en superuppsättning av programmeringsspråket CLIPS . Det skrevs först i slutet av 1995. Språket tillhandahåller regelbaserad programmering för automatisering av ett expertsystem och kallas ofta för ett expertsystemskal . På senare år intelligenta agentsystem utvecklats, som är beroende av en liknande förmåga.

Snarare än ett procedurparadigm , där ett enskilt program har en loop som bara aktiveras en gång, tillämpar det deklarativa paradigmet som används av Jess kontinuerligt en samling regler på en samling fakta genom en process som kallas mönstermatchning . Regler kan modifiera insamlingen av fakta, eller så kan de köra valfri Java-kod. Den använder Rete-algoritmen för att exekvera regler.

Licens

Även om CLIPS är licensierat som öppen källkod , är Jess inte öppen källkod. JESS är gratis för utbildnings- och statlig användning, men en licens krävs för att använda JESS för kommersiella system.

Kodexempel

Kodexempel:



  



   
                    

 
           
           
           
          

 
              
              
              
             

        ; är en kommentar   (  bind  ?x  100  )  ; x = 100   (  deffunction  max  (  ?  a  ​​?  b  )  (  om  (  >  ?a  ?b  )  sedan  ?  a  annat  ?b  ))  (  deffacts  myroom  (  möbelstol  )  (  möbelbord  )  (  möbelsäng  )  )  (  deftemplate  car  (  kortplats )   färg  )  (  slot  körsträcka  )  (  slot  värde  )  )  (  hävda  (  bil  (  färg  röd  )  (  körsträcka  10000  )  (  värde  400  ))) 

Exempelkod:


     
  
             
             
             
             
             
             
             
             
          
  
            
                    
         
              
         
  
               
                     
         
              
         
  
                    
                     
         
              
         


 (  rensa  )  (  deftemplate  blood-donor  (  slot  name  )  (  slot  type  ))  (  deffacts  blood-bank  ; lägg in namn och deras typer i [[arbetsminne]]  (  blodgivare  (  namn  "Alice"  )(  typ  "A"  ))  (  blodgivare  (  namn  "Agatha"  )(  typ  "A"  ))  (  blodgivare  (  namn  "Bob"  )(  typ  "B"  ))  (  blodgivare  (  namn  "Barbara"  )(  typ  "B" "  ))  (  blodgivare  (  namn  "Jess"  )(  typ  "AB"  ))  (  blodgivare  (  namn  "Karen"  )(  typ  "AB"  ))  (  blodgivare  (  namn  "Onan"  )(  typ  " O"  ))  (  blodgivare  (  namn  "Osbert"  )(  typ  "O"  ))  )  (  defrule  kan-ge-till-samma-typ-men-inte-själv  ; hanterar A > A, B > B, O > O, AB > AB, men inte N1 > N1  (  blodgivare  (  namn  ?namn  )(  typ  ?typ  ))  (  blodgivare  (  namn  ?namn2  )(  typ  ?typ2  &:  (  eq  ?typ  ?typ2  )  & :  (  neq  ?namn  ?namn2  )  ))  =>  (  utskrift  av  ?namn  " kan ge blod till "  ?namn2  crlf  )  )  (  defrule  O-ger-till-andra-men-inte-själv  ; O till O täcker in ovan regel  (  blodgivare  (  namn  ?namn  )(  typ  ?typ  &:  (  eq  ?typ  "O"  )))  (  blodgivare  (  namn  ?namn2  )(  typ  ?typ2  &:  (  neq  ?typ  ?typ2  )  &:  (  neq  ?namn  ?namn2  )  ))  =>  (  utskrift  t  ?namn  " kan ge blod till "  ?namn2  crlf  )  )  (  defrule  A-eller-B-ger-to-AB  ; fall O ger till AB och AB ger till AB som redan behandlats   (  blodgivare  (  namn  ?namn  )(  typ  ?typ  &:  (  eller  (  eq  ?typ  "A"  )  (  eq  ?typ  "B"  ))))  (  blodgivare  (  namn  ?namn2  )(  typ  ?typ2  &:  (  eq  ?typ2  "AB"  )  &:  (  neq  ?namn  ?namn2  )  ))  =>  (  utskrift  t  ?namn  " kan ge blod till "  ?namn2  crlf  )  )  ;(titta på alla)  (  återställ  )  (  kör  ) 

Se även

Relaterade system

Ytterligare källor

externa länkar