Size: a a a

2021 April 06

UT

Unknown T. in Lisp Forever
ну условие вычислить на этапе раскрытие же не проблема
если с ifoм внутри делать, то так и будет, типа
(if (eval condition) (list …then…) (list …else…))

но как это поможет избавиться от if
источник

UT

Unknown T. in Lisp Forever
Ну да. Но вот интересно, сам if же как-то реализован в lisp? Они же внутри не используют unless, а unless - if ) Кольцевая зависимость получается
источник

A

Aragaer in Lisp Forever
в том-то и дело, что это special form, (ну или cond это special form), то есть где-то в каком-то месте мы из чистого лиспа уходим
источник

UT

Unknown T. in Lisp Forever
То есть типа не lisp говорит интерпретатору, по какой ветке пойти, а сам интерпретатор видит if и обрабатывает его специальным образом?
источник

LL

Lämppi Lütti in Lisp Forever
Это функция которая встроена в реализацию, а не объявлена где-то в пакете
источник

UT

Unknown T. in Lisp Forever
нашел в sicp, но не особо понятнее:(test (op true?) (reg val)) — это псевдокод?
https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-34.html#%_sec_5.4.3
источник

LL

Lämppi Lütti in Lisp Forever
Типо какой-нибудь when это макрос из cl и полное имя у него cl::when, а if это просто if
источник

UT

Unknown T. in Lisp Forever
Ну а чисто концептуально интересно, как реализован if. Выглядит так, что для реализации if нужен if )
источник

a

akater in Lisp Forever
Я к тому, что вопрос стоит для начала переформулировать.
источник

LL

Lämppi Lütti in Lisp Forever
Когда лисп реализуешь делаешь сразу спец формы, а потом уже на лиспе их используешь чтобы стандартную либу написать
источник

LL

Lämppi Lütti in Lisp Forever
Он и используется
источник

LL

Lämppi Lütti in Lisp Forever
Вот если бы банка была написана на С то if был бы сишный
источник

LL

Lämppi Lütti in Lisp Forever
Если на джаве, то джавный
источник

LL

Lämppi Lütti in Lisp Forever
А банка на кл, так что там клный, но это выглядит не так как кажется
источник

UT

Unknown T. in Lisp Forever
Банка — интерпретатор?
источник

LL

Lämppi Lütti in Lisp Forever
SBCL
источник

LL

Lämppi Lütti in Lisp Forever
Ну в общем да
источник

UT

Unknown T. in Lisp Forever
Понял, спасибо
источник

UT

Unknown T. in Lisp Forever
Ну да, логично.
А как в принципе оператор условия работает на самом низком уровне? Вот в конечно итоге спускаемся до ассемблера, там je/jne, например, как они обрабатываются процессором? Та же проблема, что для if нужен if
источник

a

akater in Lisp Forever
источник