Na początku wydawało się to nieintuicyjne, ale teraz uważam, że jest cudowne, i czytałem głównie. Tak właśnie mówimy: „Suma…, iloczyn…” Wymaga to jednak innego rodzaju czytania. Teraz po prostu zastosuj operator do wszystkich argumentów, zamiast czytać je w linii.
Mark C
Co jest nie tak z notacją przedrostka? Korzystają z niego prawie wszystkie języki. Wywołania funkcji są prawie zawsze prefiksami.
SK-logic
Nie całkiem; „intuicyjny” jest intuicyjny, ponieważ nauczyłeś się go w formie matematycznych konwencji od ponad 20 lat. Ponieważ tylko LISP i być może kilka innych języków korzysta z tej konwencji, a nadal będziesz uczyć się znacznie więcej, prawie nigdy nie stanie się on równie „intuicyjny”. I mówimy tu tylko o prostych wyrażeniach (2 + 3 ... jak chciałbyś wypróbować linijkę „pół strony”?)
Rook
Odpowiedzi:
6
Pomocne może być czytanie mentalne od lewej do prawej jako język mówiony z odpowiednimi czasownikami. Na przykład (+ 3 2) może oznaczać „dodaj trzy i dwa”. W bardziej ogólnym przypadku możesz powiedzieć „wykonaj operację $ na operandach $”. Zastosowano w tym samym przypadku: „Wykonaj operację dodawania dla trzech i dwóch”.
Używałbyś retorycznych pytań. :) Równy? (Co?), „1 i 2! (Ehm ... Nie ...)
Arafangion
@RiceFlour (Hej, dorastałem jedząc rzeczy zrobione z mąki ryżowej - mam problem z glutenem). Czytałbym: „Czy jeden równa się dwa?” Lub „Czy następujące są równe?” Operatory większe niż i mniejsze niż nie są tak naturalne w formie prefiksu, ale zastanawiam się, jak często są używane w kodzie Lisp.
Mark C
7
Wydziwianie? Po co?
Nie wydaje ci się to intuicyjne, ponieważ parser mentalny nie jest do tego przyzwyczajony. Będzie lepiej, jeśli będziesz go używać i czytać w kółko.
I nawet nie czytać , że wiele z nich, ale teraz myślę, że to jest wspaniałe. Wygląda na to, że mój mózg zaczyna mieć niemal „dotykowe” wyczucie nawiasów. Myślę, że to uczucie stanie się bardziej żywe.
Mark C
5
Możesz myśleć o tym jako o rodzaju wywołania funkcji:
(operator operand1 operand2 ...)
Nie ma w tym nic specjalnego. Jeśli przeciążasz operatorów w C ++ (i wielu innych językach, które na to pozwalają), często musisz dokładnie zdefiniować ten rodzaj funkcji:
Tak, tak to robię. Jeśli cofniesz się i spojrzysz na wywołania metod w Javie, C # itp., To tak naprawdę to tylko przedrostek notacji z nawiasami w nieco innym miejscu: MyMethod (arg1, arg2).
nlawalker
4
Wiele języków używa kombinacji przedrostka, przyrostka, a nawet postfiksa.
Lisp używa tylko prefiksu - domyślnie. Jeśli sin (x) jest intuicyjny w matematyce, to (sin x) nie jest daleko. Jeśli przeprowadzka (pies, dom) jest tradycyjnym wezwaniem na zabieg, to w Lisp jest to po prostu (przeprowadzka pies do domu).
Lisp nie robi żadnego wyjątku dla matematyki i traktuje +, -, * i inne jak zwykłe wywołania funkcji.
Kiedy (w końcu) „Wszystko jest wywołaniem funkcji” (lub specjalną formą lub makropoleceniem, oba mają składnię powierzchniową „wywołania funkcji”), wydawało się to całkiem naturalne.
Dlatego (= 1 2)czytam to jako „wywołanie porównania równości numerycznej na 1 i 2”.
Odpowiedzi:
Pomocne może być czytanie mentalne od lewej do prawej jako język mówiony z odpowiednimi czasownikami. Na przykład (+ 3 2) może oznaczać „dodaj trzy i dwa”. W bardziej ogólnym przypadku możesz powiedzieć „wykonaj operację $ na operandach $”. Zastosowano w tym samym przypadku: „Wykonaj operację dodawania dla trzech i dwóch”.
źródło
( = 1 2 )
i( > 4 2 )
Wydziwianie? Po co?
Nie wydaje ci się to intuicyjne, ponieważ parser mentalny nie jest do tego przyzwyczajony. Będzie lepiej, jeśli będziesz go używać i czytać w kółko.
źródło
Możesz myśleć o tym jako o rodzaju wywołania funkcji:
Nie ma w tym nic specjalnego. Jeśli przeciążasz operatorów w C ++ (i wielu innych językach, które na to pozwalają), często musisz dokładnie zdefiniować ten rodzaj funkcji:
źródło
Wiele języków używa kombinacji przedrostka, przyrostka, a nawet postfiksa.
Lisp używa tylko prefiksu - domyślnie. Jeśli sin (x) jest intuicyjny w matematyce, to (sin x) nie jest daleko. Jeśli przeprowadzka (pies, dom) jest tradycyjnym wezwaniem na zabieg, to w Lisp jest to po prostu (przeprowadzka pies do domu).
Lisp nie robi żadnego wyjątku dla matematyki i traktuje +, -, * i inne jak zwykłe wywołania funkcji.
źródło
Kiedy (w końcu) „Wszystko jest wywołaniem funkcji” (lub specjalną formą lub makropoleceniem, oba mają składnię powierzchniową „wywołania funkcji”), wydawało się to całkiem naturalne.
Dlatego
(= 1 2)
czytam to jako „wywołanie porównania równości numerycznej na 1 i 2”.źródło