Átomos
atomos = [:p, :q, :r]
conectivos = [:"¬", :"∧", :"∨", :"→"]
[atomos: atomos, conectivos: conectivos]formula_1 = {:p, :"∧", :q}defmodule LogicaClassicaProposicional do
@nao :"¬"
@conjuncao :"∧"
@disjuncao :"∨"
@implicacao :"→"
@conectivos [@nao, @conjuncao, @disjuncao, @implicacao]
def new(atomos) do
[atomos: atomos, conectivos: @conectivos]
end
def atomo([{:atomos, atomos} | _rest], atomo)
when is_atom(atomo) do
if atomo in atomos do
atomo
else
raise "Erro: o átomo #{atomo} não faz parte da linguagem."
end
end
# def nao([{:atomos, atomos} | _rest ], atomo)
# when is_atom(atomo) do
# if atomo in atomos do
# [@nao, atomo]
# else
# raise "Erro: o átomo #{atomo} não faz parte da linguagem."
# end
# end
def nao(formula) do
[@nao, formula]
end
def mostra(atomo) when is_atom(atomo) do
"#{atomo}"
end
def mostra([@nao, formula]) do
"#{@nao}#{mostra(formula)}"
end
endalias LogicaClassicaProposicional, as: LCP
linguagem = LCP.new([:p, :q, :r])
nao_p = LCP.nao(LCP.atomo(linguagem, :p))
IO.puts(LCP.mostra(nao_p))
nao_nao_p = LCP.nao(nao_p)
IO.puts(LCP.mostra(nao_nao_p))
# LCP.nao(linguagem, :s)LCP.new([:p, :q, :r, :s])
|> LCP.atomo(:p)
|> LCP.nao()
|> LCP.nao()
|> LCP.nao()
|> LCP.nao()
|> LCP.mostra()