home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / prolog / pdprolog / bicycle.pro < prev    next >
Text File  |  1986-05-05  |  1KB  |  35 lines

  1. /* Describe the parts required to make a bicycle. Firt the elementary parts
  2. are given (basicpart). Then a description of various subassemblies.
  3. Ask: ?-partsof( hub, P ). to get all the basic parts required to make a hub.
  4. Ask: ?-partsof( bike, P ). for the whole bike. */
  5.  
  6.  
  7. basicpart( rim ).
  8. basicpart( rearframe ).
  9. basicpart( gears ).
  10. basicpart( nut ).
  11. basicpart( spoke ).
  12. basicpart( handles ).
  13. basicpart( bolt ).
  14. basicpart( fork ).
  15.  
  16. assembly( bike, [quant( wheel, 2 ), quant( frame, 1 )] ).
  17. assembly( wheel, [quant( spoke, 20 ), quant( rim, 1 ), quant( hub, 1)] ).
  18. assembly( frame, [quant( rearframe, 1), quant( frontframe, 1 ) ] ).
  19. assembly( frontframe, [quant( fork, 1 ), quant( handles, 1 )] ).
  20. assembly( hub, [quant( gears, 1 ), quant( axle, 1 ) ] ).
  21. assembly( axle, [quant( bolt, 1 ), quant( nut, 2) ] ).
  22.  
  23. partsof( X, [X] ) :- basicpart( X ).
  24. partsof( X, P ) :- assembly( X, Subparts ),
  25.                    partsoflist( Subparts, P ).
  26.  
  27. partsoflist( [], [] ).
  28. partsoflist( [quant( X,N ) | Tail ], Total ) :-
  29.              partsof( X, Headparts ),
  30.              partsoflist( Tail, Tailparts ),
  31.              append( Headparts, Tailparts, Total ).
  32.  
  33. append( [], L, L ).
  34. append( [X|L1], L2, [X|L3] ) :- append( L1, L2, L3 ).
  35.