[erlang-questions] nand problem

Roelof Wobben <>
Mon Jan 26 18:59:51 CET 2015


Hugo Mills schreef op 26-1-2015 om 18:50:
> On Mon, Jan 26, 2015 at 06:40:56PM +0100, Roelof Wobben wrote:
>> Roelof Wobben schreef op 26-1-2015 om 18:36:
>>> Hugo Mills schreef op 26-1-2015 om 18:26:
>>>> On Mon, Jan 26, 2015 at 05:21:42PM +0100, Roelof Wobben wrote:
>>>> [snip]
>>>>> b_and(true, true) ->
>>>>>    true;
>>>>>
>>>>> b_and(true, false) ->
>>>>>    false;
>>>>>
>>>>> b_and(false, true) ->
>>>>>    false;
>>>>>
>>>>> b_and(false, false) ->
>>>>>    false.
>>>>     You could make this shorter and possibly easier to read with
>>>>
>>>> b_and(true, true) ->
>>>>      true;
>>>> b_and(_, _) ->
>>>>      false.
>>>>
>>>>     i.e. define the (one) special case, and then just say that
>>>> everything else evaluates to false. You can do something similar with
>>>> b_or.
>>>>
>>>>     Hugo.
>>>>
>>> Yes, I could do that .
>>> I thought I have read somewhere that using _ for defensive
>>> programming was nog good practice
>>> but that was on using other on case on the next chapter.
>>>
>>> I will change my code.
>>>
>>> Roelof
>>>
>>>
>>>
>>> _______________________________________________
>>> erlang-questions mailing list
>>> 
>>> http://erlang.org/mailman/listinfo/erlang-questions
>>>
>> This one better :
>>
>> -module(boolean).
>>
>> -export([b_not/1, b_and/2, b_or/2, b_nand/2]).
>>
>> b_not(true) ->
>>    false;
>>
>> b_not(_) ->
>>    true.
>>
>> b_and(true, true) ->
>>    true;
>>
>> b_and(_, _) ->
>>    false.
>>
>>
>> b_or(true, _) ->
>>    true;
>>
>> b_or(_, true) ->
>>    true;
>>
>> b_or(false, false) ->
>>    false.
>     Or just:
>
> b_or(false, false) ->
>     false;
> b_or(_, _) ->
>     true.
>
>> b_nand(true,true) ->
>>      b_not(b_and(true, true));
>>
>> b_nand(_, _) ->
>>    b_not(b_and(true, false));
>     You don't need different clauses here. NAND is defined as the NOT
> of the AND of its two arguments. Or, in other words:
>
> b_nand(X, Y) ->
>      b_not(b_and(X, Y)).
>
> just as Ivan suggested.
>
>     Hugo.

Oke,

I have read that nand gives true only when it true true otherwise it's 
always false.
But it seems that I have misread it.

Again thanks for the help.

Roelof





More information about the erlang-questions mailing list