Nп/п : 87 из 93
 От   : none) (albert                       2:5075/128        22 сен 23 14:52:32
 К    : Kaz Kylheku                                           22 сен 23 15:55:03
 Тема : Re: Understanding apply in MAL (clojure dialect)
----------------------------------------------------------------------------------
                                                                                 
@MSGID:
a8b0df96
@REPLY: <20230921065214.723@kylheku.com> 97d9cbd6
@REPLYADDR none) (albert
@REPLYTO 2:5075/128 none) (albert
@CHRS: CP866 2
@RFC: 1 0
@RFC-References:
<20230921065214.723@kylheku.com>
@RFC-Message-ID:

@TZUTC: 0200
@TID: FIDOGATE-5.12-ge4e8b94
In article <20230921065214.723@kylheku.com>,
Kaz Kylheku  <864-117-4973@kylheku.com> wrote:
>On 2023-09-21, albert@cherry.(none) (albert)  wrote:
>> (apply symbol? (list (quote two))
>> We arrive at the list to be evaluated
>> (<#4623388> ) where  #4623388 is the actual function symbol? refers to.
>>
>> This is an abstract structure tree: a list consisting of a a function
>> and a symbol.
>>
>> Now we are supposed to evaluate this list.
>
>No, that would be a double evaluation.

That clears up nothing to me.
lisp does double evaluations all the time.
Suppose you have `fx a user defined function.
(fx 1 2)
The first item of the list is not a function, we are not happy thus:
step 1 evaluate fx, the result is a list.
The first item of the list is not a function, we are not happy thus:
step 2 evaluate the list, the result is a function
Now we are in a position to tackle (#111 1 2)
Is that not a third evaluation then what is it?

>
>In a Lisp-1 dialect,
>
>  (apply fun (list a b c))
>
>is the same as
>
>  (fun a b c)
>
>You`re talking about:
>
>  ((eval fun) (eval (list a b c)))
>
>apply is an ordinary function. After evaluating the arguments
>we have these items

fun is a symbol. It *got* to be evaluated, if we want the underlying
function. What am I missing here?

>
> (#<4580123> #<4623388> (two))
>   ^         ^
>   apply     symbol?
>
>we are now ready to call the function: we call #<4580123>,
>which is apply, passing it #<4623388> and (two).
>
>apply doesn`t eval anything: apply takes the list (two) and spreads
>it into individual arguments, which are passed to #<4623388>.

I managed to
(apply symbol? (list (quote two)))
to succeed giving true,
passing the symbol `two to the now disembodied symbol?
by relying on functions in the underlying implementation language.

That is no solution, you can`t pass arguments in lisp!
You can only evaluate lists, or more precisely you got to put
the function and arguments into a list
The following tests now fails:
;; Testing apply function with user functions
(apply (fn* (a b) (+ a b)) (list 2 3))
You can abstract the fn* in a disembodied function #1222
but it is supposed to be in a list, such as
(#1222 3 4) otherwise the function can not find its arguments
to fill it in on the places a and b.
Now the story goes on. #1222 doesn`t know better better than to
evaluate its arguments and the problem only shifts.

Groetjes Albert





>--
Kaz
-- 
Don`t praise the day before the evening. One swallow doesn`t make spring.
You must not say "hey" before you have crossed the bridge. Don`t sell the
hide of the bear until you shot it. Better one bird in the hand than ten in
the air. First gain is a cat spinning.            - the Wise from Antrim -
--- trn 4.0-test77 (Sep 1, 2010)
 * Origin: KPN B.V. (2:5075/128)
SEEN-BY: 5001/100 5005/49 5015/255 5019/40 5020/715
848 1042 4441 12000
SEEN-BY: 5030/49 1081 5058/104 5075/128
@PATH: 5075/128 5020/1042 4441



   GoldED+ VK   │                                                 │   09:55:30    
                                                                                
В этой области больше нет сообщений.

Остаться здесь
Перейти к списку сообщений
Перейти к списку эх