** Quindi, ho lavorato con Erlang, prima, e sono piuttosto tranquillo con esso. Sto solo cercando di imparare l'elisir.Perché ricevo un FunctionClauseError ("nessuna clausola della funzione corrispondente") in questo programma Elixir, tradotto da Erlang?
Recentemente stavo cercando di tradurre un esempio di 'lazy catering' in elisir e sono confuso sul motivo per cui non viene compilato, o viene compilato con un avviso e non funziona. Cosa mi manca, qui; Qualche idea? Il codice Erlang e 'run' sono le seguenti: **
[email protected] ~/dev/erlang
$ cat cater.erl
-module(cater).
-export([cater/1]).
cater(0) -> 1;
cater(N) when N>0 -> N + cater(N-1).
[email protected] ~/dev/erlang
$ erl
Eshell V6.3 (abort with ^G)
1> c("cater.erl").
{ok,cater}
2> cater:cater(10).
56
3>*
Quando scrivo Cater.ex in questo modo, si ottiene un errore che non ha senso per me:
[email protected] ~/dev/elix
$ cat Cater.ex
defmodule Cater do
def cut(0), do: 1
def cut(N) when N>0, do: N + cut(N-1)
end
[email protected] ~/dev/elix
$ iex
Interactive Elixir (1.0.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> c("Cater.ex")
Cater.ex:1: warning: redefining module Cater
Cater.ex:3: warning: this expression will fail with ArithmeticError
[Cater]
iex(2)> Cater.cut(10)
** (FunctionClauseError) no function clause matching in Cater.cut/1
Cater.ex:2: Cater.cut(10)
iex(2)>
Arrrrgh! Che idiota sono. Non appena ho postato questo messaggio, ho avuto un 'sentimento', sono tornato indietro ed editato, e 'abbastanza sicuro', l'elisir non mi piaceva il fatto che i miei nomi variabili fossero maiuscoli. Una volta che ho cambiato tutti gli Ns in n, è stato compilato e eseguito correttamente. Mi dispiace disturbare il tuo – jpsthecelt
Succede al meglio di noi :) – jjbohn
Forse potresti cambiare il titolo, così le persone possono recuperare facilmente il tuo post: ho avuto anche questo problema nel provare elisir, dove tutto ricorda erlang, ma tutto è diverso: o) – Pascal