Sujet : Re: Lisp history: IF, etc.
De : 643-408-1753 (at) *nospam* kylheku.com (Kaz Kylheku)
Groupes : comp.lang.lispDate : 04. Apr 2024, 09:35:30
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <20240404001056.923@kylheku.com>
References : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
User-Agent : slrn/pre1.0.4-9 (Linux)
On 2024-04-04, Lawrence D'Oliveiro <
ldo@nz.invalid> wrote:
On Wed, 03 Apr 2024 15:29:52 -0700, Paul Rubin wrote:
>
I think lazy evaluation is not needed since the
input to the Church boolean (I hope I have the jargon right) is two
lambda abstractions. The boolean selects one of them, and the result is
applied to whatever the next thing is.
>
I use this in Python, to try to avoid that abortion that is the Python
conditional expression. Instead of, say,
Category error: "that abortion" is Python. If you're in the middle of it,
you've already lost the ideological battle. Use it like it was meant to be.
a = x / y if y != 0 else 0
>
I would do
>
a = (lambda : 0, lambda : x / y)[y != 0]()
Not only is it more verbose, but it's unlikely that Python's compiler
recognizes the idiom and optimizes away the lambdas.
import dis
def f0():
return x / y if y != 0 else 0
def f1():
(lambda : 0, lambda : x / y)[y != 0]()
print('disasembly of f0')
dis.dis(f0)
print('disasembly of f1')
dis.dis(f1)
disasembly of f0
4 0 LOAD_GLOBAL 0 (y)
2 LOAD_CONST 1 (0)
4 COMPARE_OP 3 (!=)
6 POP_JUMP_IF_FALSE 16
8 LOAD_GLOBAL 1 (x)
10 LOAD_GLOBAL 0 (y)
12 BINARY_TRUE_DIVIDE
14 RETURN_VALUE
>> 16 LOAD_CONST 1 (0)
18 RETURN_VALUE
disasembly of f1
7 0 LOAD_CONST 1 (<code object <lambda> at 0xb77c88b8, file "distest.py", line 7>)
2 LOAD_CONST 2 ('f1.<locals>.<lambda>')
4 MAKE_FUNCTION 0
6 LOAD_CONST 3 (<code object <lambda> at 0xb77c8910, file "distest.py", line 7>)
8 LOAD_CONST 2 ('f1.<locals>.<lambda>')
10 MAKE_FUNCTION 0
12 BUILD_TUPLE 2
14 LOAD_GLOBAL 0 (y)
16 LOAD_CONST 4 (0)
18 COMPARE_OP 3 (!=)
20 BINARY_SUBSCR
22 CALL_FUNCTION 0
24 POP_TOP
26 LOAD_CONST 0 (None)
28 RETURN_VALUE
Deliberately writing longer, harder-to-read code, that is also slower, takes a
special sort of cretin.
-- TXR Programming Language: http://nongnu.org/txrCygnal: Cygwin Native Application Library: http://kylheku.com/cygnalMastodon: @Kazinator@mstdn.ca
Date | Sujet | # | | Auteur |
2 Apr 24 | Lisp history: IF, etc. | 56 | | Alan Bawden |
2 Apr 24 | Re: Lisp history: IF, etc. | 1 | | Kaz Kylheku |
3 Apr 24 | Re: Lisp history: IF, etc. | 1 | | Gijs Hillenius |
3 Apr 24 | Re: Lisp history: IF, etc. | 1 | | Gijs Hillenius |
3 Apr 24 | Re: Lisp history: IF, etc. | 49 | | Madhu |
3 Apr 24 | Re: Lisp history: IF, etc. | 48 | | Alan Bawden |
3 Apr 24 | Re: Lisp history: IF, etc. | 35 | | Paul Rubin |
3 Apr 24 | Re: Lisp history: IF, etc. | 34 | | Alan Bawden |
4 Apr 24 | Re: Lisp history: IF, etc. | 32 | | Paul Rubin |
4 Apr 24 | Re: Lisp history: IF, etc. | 5 | | Lawrence D'Oliveiro |
4 Apr 24 | Re: Lisp history: IF, etc. | 3 | | Axel Reichert |
4 Apr 24 | Re: Lisp history: IF, etc. | 1 | | Lawrence D'Oliveiro |
4 Apr 24 | Re: Lisp history: IF, etc. | 1 | | Paul Rubin |
4 Apr 24 | Re: Lisp history: IF, etc. | 1 | | Kaz Kylheku |
4 Apr 24 | Re: Lisp history: IF, etc. | 26 | | Alan Bawden |
5 Apr 24 | Re: Lisp history: IF, etc. | 25 | | Paul Rubin |
5 Apr 24 | Re: Lisp history: IF, etc. | 24 | | Julieta Shem |
5 Apr 24 | Re: Lisp history: IF, etc. | 1 | | Julieta Shem |
6 Apr 24 | Re: Lisp history: IF, etc. | 1 | | Lawrence D'Oliveiro |
15 Apr 24 | Re: Lisp history: IF, etc. | 21 | | Paul Rubin |
16 Apr 24 | Re: Lisp history: IF, etc. | 20 | | Jeff Barnett |
16 Apr 24 | Re: Lisp history: IF, etc. | 2 | | Lawrence D'Oliveiro |
16 Apr 24 | Re: Lisp history: IF, etc. | 1 | | Jeff Barnett |
16 Apr 24 | Re: Lisp history: IF, etc. | 16 | | Paul Rubin |
16 Apr 24 | Re: Lisp history: IF, etc. | 15 | | Jeff Barnett |
16 Apr 24 | Re: Lisp history: IF, etc. | 14 | | Lawrence D'Oliveiro |
16 Apr 24 | Re: Lisp history: IF, etc. | 12 | | Paul Rubin |
17 Apr 24 | Re: Lisp history: IF, etc. | 11 | | Lawrence D'Oliveiro |
17 Apr 24 | Re: Lisp history: IF, etc. | 10 | | Paul Rubin |
17 Apr 24 | Re: Lisp history: IF, etc. | 9 | | Jeff Barnett |
17 Apr 24 | Re: Lisp history: IF, etc. | 8 | | Lawrence D'Oliveiro |
17 Apr 24 | Re: Lisp history: IF, etc. | 7 | | Paul Rubin |
17 Apr 24 | Re: Lisp history: IF, etc. | 3 | | Madhu |
18 Apr 24 | Re: Lisp history: IF, etc. | 2 | | Lawrence D'Oliveiro |
18 Apr 24 | Re: Lisp history: IF, etc. | 1 | | Paul Rubin |
17 Apr 24 | Re: Lisp history: IF, etc. | 3 | | Ben Bacarisse |
18 Apr 24 | Re: Lisp history: IF, etc. | 2 | | Lawrence D'Oliveiro |
18 Apr 24 | Re: Lisp history: IF, etc. | 1 | | Stefan Monnier |
17 Apr 24 | Re: Lisp history: IF, etc. | 1 | | Jeff Barnett |
17 Apr 24 | Re: Lisp history: IF, etc. | 1 | | Stefan Ram |
4 Apr 24 | Re: Lisp history: IF, etc. | 1 | | Ben Bacarisse |
3 Apr 24 | Re: Lisp history: IF, etc. | 7 | | Kaz Kylheku |
4 Apr 24 | Re: Lisp history: IF, etc. | 5 | | Alan Bawden |
4 Apr 24 | Re: Lisp history: IF, etc. | 3 | | Kaz Kylheku |
4 Apr 24 | Re: Lisp history: IF, etc. | 2 | | Kaz Kylheku |
4 Apr 24 | on levels of disappointment (Was: Re: Lisp history: IF, etc.) | 1 | | Julieta Shem |
4 Apr 24 | Re: Lisp history: IF, etc. | 1 | | Julieta Shem |
5 Apr 24 | Re: Lisp history: IF, etc. | 1 | | Spiros Bousbouras |
4 Apr 24 | Re: Lisp history: IF, etc. | 3 | | Lawrence D'Oliveiro |
4 Apr 24 | Re: Lisp history: IF, etc. | 2 | | Alan Bawden |
4 Apr 24 | Re: Lisp history: IF, etc. | 1 | | Kaz Kylheku |
12 Apr 24 | Re: Lisp history: IF, etc. | 2 | | Alan Bawden |
12 Apr 24 | Re: Lisp history: IF, etc. | 1 | | Lawrence D'Oliveiro |
4 Apr 24 | Re: Lisp history: IF, etc. | 3 | | Kaz Kylheku |
4 Apr 24 | Re: Lisp history: IF, etc. | 2 | | Alan Bawden |
4 Apr 24 | Re: Lisp history: IF, etc. | 1 | | Lawrence D'Oliveiro |