Hi Jussi,

Your version compiles down more neatly than the ifelse version. On my 
system, BenchmarkTools gives nearly identical results; I don't know why, 
but the ifelse version is consistently a smidge faster (~%2, relative 
speed). Here is the llvm code and local native code for each, your version 
looks more tidy.  


```
implies(p::Bool, q::Bool) = (p <= q)          implies(p::Bool, q::Bool) 
= ifelse( p, q, true )

# llvm

  %2 = xor i8 %0, 1                                %2 = and i8 %0, 1
  %3 = or i8 %2, %1                                %3 = icmp eq i8 %2, 0
  ret i8 %3                                        %4 = select i1 %3, i8 1, 
i8 %1
                                                   ret i8 %3

# native with some common code removed

        xorb   $1, %dil                            testb  $1, %dil
orb    %sil, %dil                          movb   $1, %al
        movb   %dil, %al                           je     L15
        popq   %rbp                                movb   %sil, %al
        retq                                 L15:  popq   %rbp
                                                   retq
```




On Friday, October 7, 2016 at 12:22:23 AM UTC-4, Jussi Piitulainen wrote:
>
>
> implies(p::Bool, q::Bool) = p <= q
>
>
>
> torstai 6. lokakuuta 2016 19.10.51 UTC+3 Kevin Liu kirjoitti:
>>
>> How is an implication represented in Julia? 
>>
>>
>> https://en.wikipedia.org/wiki/Material_conditional#Definitions_of_the_material_conditional
>>
>

Reply via email to