Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright The Sett Ltd, 2005 to 2014.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package com.thesett.aima.logic.fol.wam.builtins;
 
 import java.util.Map;
 
BuiltInTransform implements a compilation transformation over term syntax trees, that substitutes for functors that map onto Prolog built-ins, an extension of the functor type that implements the built-in.

CRC Card
Responsibilities Collaborations
Transform functors to built in functors where appropriate. BuiltInFunctor, com.thesett.aima.logic.fol.VariableAndFunctorInterner.

Author(s):
Rupert Smith
 
 public class BuiltInTransform implements Function<FunctorFunctor>
 {
    
Holds a mapping from functor names to built-in implementations.
 
     private Map<FunctorNameClass<? extends BuiltInFunctor>> builtIns =
         new HashMap<FunctorNameClass<? extends BuiltInFunctor>>();

    
Holds the default built in, for standard compilation and interners and symbol tables.
 
     private final DefaultBuiltIn defaultBuiltIn;

    
Initializes the built-in transformation by population the the table of mappings of functors onto their built-in implementations.

Parameters:
defaultBuiltIn The default built in, for standard compilation and interners and symbol tables.
 
     public BuiltInTransform(DefaultBuiltIn defaultBuiltIn)
     {
         this. = defaultBuiltIn;
 
         .put(new FunctorName("true", 0), True.class);
         .put(new FunctorName("fail", 0), Fail.class);
         .put(new FunctorName("!", 0), Cut.class);
 
         /*builtIns.put(new FunctorName("=", 2), Unifies.class);
         builtIns.put(new FunctorName("\\=", 2), NonUnifies.class);*/
         .put(new FunctorName(";", 2), Disjunction.class);
         .put(new FunctorName(",", 2), Conjunction.class);
         .put(new FunctorName("call", 1), Call.class);
         /*builtIns.put(new FunctorName("is", 2), Is.class);
         builtIns.put(new FunctorName(">", 2), GreaterThan.class);
         builtIns.put(new FunctorName(">=", 2), GreaterThanOrEqual.class);
         builtIns.put(new FunctorName("<", 2), LessThan.class);
         builtIns.put(new FunctorName("=<", 2), LessThanOrEqual.class);
         builtIns.put(new FunctorName("integer", 1), IntegerCheck.class);
         builtIns.put(new FunctorName("float", 1), FloatCheck.class);*/
     }

    
Applies a built-in replacement transformation to functors. If the functor matches built-in, a BuiltInFunctor is created with a mapping to the functors built-in implementation, and the functors arguments are copied into this new functor. If the functor does not match a built-in, it is returned unmodified.

Parameters:
functor The functor to attempt to map onto a built-in.
Returns:
The functor unmodified, or a BuiltInFunctor replacement for it.
 
     public Functor apply(Functor functor)
     {
         FunctorName functorName = .getInterner().getFunctorFunctorName(functor);
 
         Class<? extends BuiltInFunctorbuiltInClass;
 
         builtInClass = .get(functorName);
 
         if (builtInClass != null)
         {
             return ReflectionUtils.newInstance(ReflectionUtils.getConstructor(builtInClass,
                     new Class[] { Functor.classDefaultBuiltIn.class }), new Object[] { functor });
         }
         else
        {
            return functor;
        }
    }
New to GrepCode? Check out our FAQ X