joustava

joustava

Genetic Algorithms in Elixir: Code throws error (page 111)

Not sure if I’m doing something wrong here, but it seems that this piece of code will throw errors:

def fitness_function(chromosome) do
    target = 'ILoveGeneticAlgorithms'
    encrypted = 'LIjs`B`k`qlfDibjwlqmhv'
    cipher = fn word, key -> Enum.map(word, & rem(&1 ^^^ key, 32768)) end
    key =
      chromosome.genes
      |> Enum.map(&Integer.to_string/1)
      |> Enum.join("")
      |> String.to_integer(2)

      guess = List.to_string(cipher.(encrypted, key))
      String.jaro_distance(target, guess)
end

As

String.jaro_distance(target, guess)

Doesn’t expect ‘charlists’ but binaries

** (FunctionClauseError) no function clause matching in String.Unicode.graphemes/1

    The following arguments were given to String.Unicode.graphemes/1:

        # 1
        'ILoveGeneticAlgorithms'

    Attempted function clauses (showing 1 out of 1):

        def graphemes(binary) when is_binary(binary)

    (elixir 1.10.3) lib/elixir/unicode/unicode.ex:252: String.Unicode.graphemes/1
    (elixir 1.10.3) lib/string.ex:2488: String.jaro_distance/2
    (genetic 0.1.0) lib/genetic.ex:24: anonymous fn/2 in Genetic.evaluate/3
    (elixir 1.10.3) lib/enum.ex:1396: Enum."-map/2-lists^map/1-0-"/2
    (genetic 0.1.0) lib/genetic.ex:23: Genetic.evaluate/3
    (genetic 0.1.0) lib/genetic.ex:116: Genetic.evolve/6
    scripts/code_breaker.exs:39: (file)

I’m running this on:

⟩ elixir --version
Erlang/OTP 23 [erts-11.0.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]

Elixir 1.10.3 (compiled with Erlang/OTP 23)

Not sure if something has changed recently regarding this issue.

Also, it seems the capture operator ‘&’ is in the wrong place in the book and should be moved before the call to ‘rem’ otherwise a

** (ArithmeticError) bad argument in arithmetic expression: rem(#Function<1.106933999/1 in CodeBreaker.fitness_function/1>, 32768)
    :erlang.rem(#Function<1.106933999/1 in CodeBreaker.fitness_function/1>, 32768)
    scripts/code_breaker.exs:16: anonymous fn/2 in CodeBreaker.fitness_function/1
    (genetic 0.1.0) lib/genetic.ex:24: anonymous fn/2 in Genetic.evaluate/3
    (elixir 1.10.3) lib/enum.ex:1396: Enum."-map/2-lists^map/1-0-"/2
    (genetic 0.1.0) lib/genetic.ex:23: Genetic.evaluate/3
    (genetic 0.1.0) lib/genetic.ex:116: Genetic.evolve/6
    scripts/code_breaker.exs:33: (file)

will occur.
I think on the next page in the iex example it is the correct way.

First Post!

adkelley

adkelley

Strings in Elixir are inserted between double quotes. Therefore change: target = 'ILoveGeneticAlgorithms' to: target = "ILoveGeneticAlgorithms"

Where Next?

Popular Pragmatic Bookshelf topics Top

New
iPaul
page 37 ANTLRInputStream input = new ANTLRInputStream(is); as of ANTLR 4 .8 should be: CharStream stream = CharStreams.fromStream(i...
New
sdmoralesma
Title: Web Development with Clojure, Third Edition - migrations/create not working: p159 When I execute the command: user=&gt; (create-...
New
mikecargal
Title: Hands-On Rust (Chap 8 (Adding a Heads Up Display) It looks like ​.with_simple_console_no_bg​(SCREEN_WIDTH*2, SCREEN_HEIGHT*2...
New
edruder
I thought that there might be interest in using the book with Rails 6.1 and Ruby 2.7.2. I’ll note what I needed to do differently here. ...
New
herminiotorres
Hi! I know not the intentions behind this narrative when called, on page XI: mount() |&gt; handle_event() |&gt; render() but the correc...
New
brunogirin
When trying to run tox in parallel as explained on page 151, I got the following error: tox: error: argument -p/–parallel: expected one...
New
jonmac
The allprojects block listed on page 245 produces the following error when syncing gradle: “org.gradle.api.GradleScriptException: A prob...
New
andreheijstek
After running /bin/setup, the first error was: The foreman' command exists in these Ruby versions: That was easy to fix: gem install fore...
New
SlowburnAZ
Getting an error when installing the dependencies at the start of this chapter: could not compile dependency :exla, "mix compile" failed...
New

Other popular topics Top

AstonJ
A thread that every forum needs! Simply post a link to a track on YouTube (or SoundCloud or Vimeo amongst others!) on a separate line an...
New
AstonJ
If it’s a mechanical keyboard, which switches do you have? Would you recommend it? Why? What will your next keyboard be? Pics always w...
New
PragmaticBookshelf
Write Elixir tests that you can be proud of. Dive into Elixir’s test philosophy and gain mastery over the terminology and concepts that u...
New
AstonJ
Curious to know which languages and frameworks you’re all thinking about learning next :upside_down_face: Perhaps if there’s enough peop...
New
AstonJ
Do the test and post your score :nerd_face: :keyboard: If possible, please add info such as the keyboard you’re using, the layout (Qw...
New
dimitarvp
Small essay with thoughts on macOS vs. Linux: I know @Exadra37 is just waiting around the corner to scream at me “I TOLD YOU SO!!!” but I...
New
PragmaticBookshelf
Author Spotlight Jamis Buck @jamis This month, we have the pleasure of spotlighting author Jamis Buck, who has written Mazes for Prog...
New
PragmaticBookshelf
Author Spotlight: VM Brasseur @vmbrasseur We have a treat for you today! We turn the spotlight onto Open Source as we sit down with V...
New
First poster: bot
zig/http.zig at 7cf2cbb33ef34c1d211135f56d30fe23b6cacd42 · ziglang/zig. General-purpose programming language and toolchain for maintaini...
New
First poster: AstonJ
Jan | Rethink the Computer. Jan turns your computer into an AI machine by running LLMs locally on your computer. It’s a privacy-focus, l...
New

Sub Categories: