mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	* Mainly fixing problems with Perl heuristics And also adding a little bit of text to the README file to help with local use and test. * Adds new sample * Adds a couple of samples more, not represented before * Moves installation intructions to CONTRIBUTING.md Refs #2309 and also changes github.com to an uniform capitalization. * Correcting error. Great job, CI * Moving another file * Adds samples and new checks for perl/perl6 * Stupid mistake * Changing regex for perl5 vs perl6 Initial suggestion by @pchaigno, slightly changed to eliminate false positives such as "classes" or "modules" at the beginning of a line in the =pod BTW, it would be interesting to just eliminate these areas for language detection. * Eliminates Rexfile from Perl6 And adds .pod6 * Followup to #2709 I just found I had this sitting here, so I might as well follow instructions to fix it. * Adds example for pod6 * Eliminates .pod because it's its own language * Removes bad directory * Reverting changes that were already there * Restored CONTRIBUTING.md from head I see installation of cmake is advised in README.md * Eliminates `.pod6` To leave way for #3366 or succeeding PRs. * Removed by request, since we're no longer adding this extension * Sorting by alphabetical order filenames * Moved from sample to test fixtures
		
			
				
	
	
		
			101 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| use strict; #-*-cperl-*-
 | |
| use warnings;
 | |
| 
 | |
| use lib qw( ../../../../lib );
 | |
| 
 | |
| =encoding utf8
 | |
| 
 | |
| =head1 NAME
 | |
| 
 | |
| Algorithm::Evolutionary::Fitness::Any - Façade for any function so that it can be used as fitness
 | |
| 
 | |
| =head1 SYNOPSIS
 | |
| 
 | |
|    use Algorithm::Evolutionary::Utils qw( string_decode )
 | |
| 
 | |
|    sub squares {
 | |
|      my $chrom = shift;
 | |
|      my @values = string_decode( $chrom, 10, -1, 1 );
 | |
|      return $values[0] * $values[1];
 | |
|    }
 | |
| 
 | |
|    my $any_eval = new Algorithm::Evolutionary::Fitness::Any \&squares;
 | |
| 
 | |
| 
 | |
| =head1 DESCRIPTION
 | |
| 
 | |
| Turns any subroutine or closure into a fitness function. Useful mainly
 | |
| if you want results cached; it's not really needed otherwise.
 | |
| 
 | |
| =head1 METHODS
 | |
| 
 | |
| =cut
 | |
| 
 | |
| package Algorithm::Evolutionary::Fitness::Any;
 | |
| 
 | |
| use Carp;
 | |
| 
 | |
| use base 'Algorithm::Evolutionary::Fitness::Base';
 | |
| 
 | |
| our $VERSION =  '3.2';
 | |
| 
 | |
| =head2 new( $function )
 | |
| 
 | |
| Assigns default variables
 | |
| 
 | |
| =cut 
 | |
| 
 | |
| sub new {
 | |
|   my $class = shift;
 | |
|   my $self = { _function => shift || croak "No functiona rray" };
 | |
|   bless $self, $class;
 | |
|   $self->initialize();
 | |
|   return $self;
 | |
| }
 | |
| 
 | |
| =head2 apply( $individual )
 | |
| 
 | |
| Applies the instantiated problem to a chromosome. It is actually a
 | |
| wrapper around C<_apply>.
 | |
| 
 | |
| =cut
 | |
| 
 | |
| sub apply {
 | |
|     my $self = shift;
 | |
|     my $individual = shift || croak "Nobody here!!!";
 | |
|     $self->{'_counter'}++;
 | |
|     return $self->_apply( $individual );
 | |
| }
 | |
| 
 | |
| =head2 _apply( $individual )
 | |
| 
 | |
| This is the one that really does the stuff. It applies the defined
 | |
| function to each individual. Itis cached for efficiency.
 | |
| 
 | |
| =cut
 | |
| 
 | |
| sub _apply {
 | |
|   my $self = shift;
 | |
|   my $individual = shift || croak "Nobody here!";
 | |
|   my $chrom = $individual->Chrom();
 | |
|   my $cache = $self->{'_cache'};
 | |
|   if ( $cache->{$chrom} ) {
 | |
|     return $cache->{$chrom};
 | |
|   }
 | |
|   my $result = $self->{'_function'}->($chrom);
 | |
|   if ( (scalar $chrom ) eq $chrom ) {
 | |
|     $cache->{$chrom} = $result;
 | |
|   }
 | |
|   return $result;
 | |
| }
 | |
| 
 | |
| 
 | |
| =head1 Copyright
 | |
|   
 | |
|   This file is released under the GPL. See the LICENSE file included in this distribution,
 | |
|   or go to http://www.fsf.org/licenses/gpl.txt
 | |
| 
 | |
| =cut
 | |
| 
 | |
| "What???";
 |