LINUX.ORG.RU
решено ФорумTalks

(or «seriously» «just trolling»)

 , ,


0

1

Читаю тут священные тексты (Гну Емакс Лисп Мануал), описание short-circuited logical operations (and, or), и попадается мне такая притча:

-- Special Form: and conditions...
     ...
     Just ‘(and)’,
     with no CONDITIONS, returns ‘t’, appropriate because all the
     CONDITIONS turned out non-‘nil’.  (Think about it; which one did not?)

Логично, подумал я. Читаю дальше:

-- Special Form: or conditions...
     ...
     Just ‘(or)’, with no CONDITIONS, returns ‘nil’,
     appropriate because all the CONDITIONS turned out ‘nil’.  (Think about it; which one did not?)

И вот тут я начал что-то подозревать. Но ведь если CONDITIONS отсутствуют, то можно совершенно одинаковым образом утверждать, что они «вернули» как nil, так и non-nil (which one did not?)?

Тайное знание, мудрый коан или толстый троллинг? Дискач.

★★★★★

Последнее исправление: Nervous (всего исправлений: 1)

Если t и nil — true и false соответственно, то так и надо. Если нет, то кто-то забыл вернуть true и false соотвественно и теперь мажется.

t184256 ★★★★★
()
Ответ на: комментарий от Nervous

Ну давай так: ты бы хотел жить в мире, где (and (and первая часть списка) (and вторая часть списка)) внезапно перестало быть тождественно (and весь список) для произвольного разбиения списка на две части? Я б в таком мире забился под одеялко и на самолетах не летал.

t184256 ★★★★★
()

У священного текста наверняка есть аффтар, можно ему написать е-мейл и попросить прояснить. Если он ещё не помер от коронавируса.

Harald ★★★★★
()
Ответ на: комментарий от Harald

Вот делать ему нечего азы растолковывать.

t184256 ★★★★★
()
Ответ на: комментарий от Crocodoom

нейтральный элемент

Понел.

Думаю, «Think about it; which one did not?» — это все-таки такое (довольно тонкое) трололо.

Nervous ★★★★★
() автор топика
Ответ на: комментарий от Nervous

это все-таки такое (довольно тонкое) трололо

Хлопок одной ладонью, всё такое, да.

no-such-file ★★★★★
()

Читаю тут священные тексты (Гну Емакс Лисп Мануал)

Вызываю испанскую инквизицию. Нет бога, кроме vim, и vimtutor — пророк его.

gremlin_the_red ★★★★★
()
Ответ на: комментарий от t184256

Ну давай так: ты бы хотел жить в мире, где (and (and первая часть списка) (and вторая часть списка)) внезапно перестало быть тождественно (and весь список) для произвольного разбиения списка на две части? Я б в таком мире забился под одеялко и на самолетах не летал.

В квоте… А, блин.

wandrien ★★
()
Ответ на: комментарий от Nervous

Думаю, «Think about it; which one did not?» — это все-таки такое (довольно тонкое) трололо.

Но ведь нигде не соврали.

AND возвращает FALSE, если хотя бы один операнд вычислился в FALSE. В данном случае ни один операнд в FALSE не вычислился.

wandrien ★★
()
Ответ на: комментарий от wandrien

AND возвращает FALSE, если хотя бы один операнд вычислился в FALSE

В данном случае ни один операнд в FALSE не вычислился.

Вот теперь да, все складывается. И в оригинальной притче это, конечно, есть:

     If all the CONDITIONS turn out non-‘nil’, then the value of the
     last of them becomes the value of the ‘and’ form.  Just ‘(and)’,
     with no CONDITIONS, returns ‘t’, appropriate because all the
     CONDITIONS turned out non-‘nil’.  (Think about it; which one did
     not?)

Тред можно закрывать, я просто невнимательный Нивхурил %)

Nervous ★★★★★
() автор топика
Последнее исправление: Nervous (всего исправлений: 1)

Но ведь если CONDITIONS отсутствуют, то можно совершенно одинаковым образом утверждать, что они «вернули» как nil, так и non-nil (which one did not?)?

Да, можно. А какое это имеет отношение к or? Там ведь совершенно не нужно, чтобы все вернули non-nil. Там нужно, чтобы ХОТЯ БЫ ОДНО вернуло non-nil.

Miguel ★★★★★
()
Ответ на: комментарий от theNamelessOne

Disgusting.

Действительно. Хорошо, что я кот (и не вимер).

Nervous ★★★★★
() автор топика

ТС, а ты понимаешь, почему and и or это не макросы и не функции, а из рода «Special Form»?

Если не понимаешь, то намекну:

ELISP> (defvar x 2)
x
ELISP> x
2 (#o2, #x2, ?\C-b)
ELISP> (incf x)
3 (#o3, #x3, ?\C-c)
ELISP> x
3 (#o3, #x3, ?\C-c)
ELISP> (and nil (incf x))
nil
ELISP> x
3 (#o3, #x3, ?\C-c)
ELISP> (and t (incf x))
4 (#o4, #x4, ?\C-d)
ados ★★★★★
()
Последнее исправление: ados (всего исправлений: 1)
Ответ на: комментарий от ados

а ты понимаешь

Что тут непонятного, все понятно даже ежику. Вопрос был про документацию, а не про кот. И в итоге оказалось, что я просто невнимательно делал rtfm.

почему and и or это не макросы

Могут быть и макросы, в кложе, например, так и есть.

Nervous ★★★★★
() автор топика
Последнее исправление: Nervous (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.