Цитата: Володимир Лісівка від 2009-11-20 02:35:15Там є змінні, тільки їх змінювати не можна.Тобто, нічого спільного зі змінними із С, Python чи ще якоїсь Java вони не мають,
Там є змінні, тільки їх змінювати не можна.
const int main(const int argc, const char * const * const argv) { printf("Вітаю, світе!\n");}
[vlisivka@apollo makefile]$ makeecho "foo"foo[vlisivka@apollo makefile]$ make TEST=barecho "bar"bar[vlisivka@apollo makefile]$ cat makefile TEST=fooall: echo "$(TEST)"
тож краще їх змінними не називати.
Щоправда, можна зробити IORef отримавши майже змінну (в традиційному розумінні), але до цього ще ж треба пережити культурний шок "а де ж змінні"?
Раніше розробники заявляли про цільову аудиторію проекту Федори. Цей реліз відповідає тим заявам?
Цитата: Владислав Чижевський від 2009-11-21 11:00:45Раніше розробники заявляли про цільову аудиторію проекту Федори. Цей реліз відповідає тим заявам?Абсолютно. Вони навіть за тиждень до випуску зробили так, щоб KDE 4 та GIMP на картках NVidia було неможливо користуватися.
Цитата: yurchor від 2009-11-21 11:26:48Цитата: Владислав Чижевський від 2009-11-21 11:00:45Раніше розробники заявляли про цільову аудиторію проекту Федори. Цей реліз відповідає тим заявам?Абсолютно. Вони навіть за тиждень до випуску зробили так, щоб KDE 4 та GIMP на картках NVidia було неможливо користуватися. От блін, у мене картка від Nvidia
Цитата: Жорж від 2009-11-21 01:18:00Використовуйте const чи final і буде вам щастя:Код: [Вибрати]const int main(const int argc, const char * const * const argv) { printf("Вітаю, світе!\n");}Воно, звісно, добре, що Ви вмієте додати до опису аргумента функції const, але чи десь я казав, шо у Ц++ чи Джаві не можна зі сталою зробити те, що можна в Хаскелі?Здається, я натякав на зворотнє, тож Вам варто було вигадати щось подібне до:Код: [Вибрати]x = 3foo = xbar = x := 5 -- уявімо, що в нас є оператор присвоєння :=, а х - зміннаmain = do print foo bar print fooі запустивши цей витвір отримати35ЦитатаЦе не зовсім те, тому що у Хаскелі обчислення ліниві (як Future в Яві), але зрозуміти буде легше. До речі, змінні які не змінюються після ініціалізації є не тільки в Хаскелі:Future - то не ліниві обчислення; навіть якщо воно не знадобиться, Future буде обчислене повністю.І, власне, лінивість жодного стосунку не має до функціональної чистоти мови. Хаскель міг би бути так само нелінивим (власне, можна скрізь ліпити $! чи seq примушуючи обчислення), але бути чистим як нелінивий Камл. ЦитатаЦитата: Жорж від 2009-11-21 01:18:00тож краще їх змінними не називати.І як же ж треба називати змінну частину функції?Ви про аргумент, чи Ви математику ще не проходили?ЦитатаЯкий такий шок? Шок від того, що звичний досвід програмування при застосуванні до чистої лінивої мови може призводити до хибних висновків щодо швидкодії та потреб ресурсів причому у обидва боки - як до перебільшення, так і до применшення.Скажімо, чи багато з тих, хто тут обговорював необхідність чи недоречність м'якого знака, одразу здогадаються, що такий дивний спосіб пошуку значення найменшого елемента списку, як сортування злиттям з подальшим вибором першого елемента матиме кількість операцій O(N), а не O(NlogN) як у алгоритму сортування, що буде використаний?Та вже один виправлений приклад (той що вгорі)Код: [Вибрати]x = 3foo = xbar = x := 5 -- уявімо, що в нас є оператор присвоєння :=, а х - зміннаmain = do print foo return bar -- тепер скомпілюється print fooвикличе певне здивування у людини, що досі писала return виключно в javascript чи PHP.
Використовуйте const чи final і буде вам щастя:Код: [Вибрати]const int main(const int argc, const char * const * const argv) { printf("Вітаю, світе!\n");}
x = 3foo = xbar = x := 5 -- уявімо, що в нас є оператор присвоєння :=, а х - зміннаmain = do print foo bar print foo
Це не зовсім те, тому що у Хаскелі обчислення ліниві (як Future в Яві), але зрозуміти буде легше. До речі, змінні які не змінюються після ініціалізації є не тільки в Хаскелі:
Цитата: Жорж від 2009-11-21 01:18:00тож краще їх змінними не називати.І як же ж треба називати змінну частину функції?
Який такий шок?
x = 3foo = xbar = x := 5 -- уявімо, що в нас є оператор присвоєння :=, а х - зміннаmain = do print foo return bar -- тепер скомпілюється print foo
Цитата: Володимир Лісівка від 2009-11-20 02:35:15Там є змінні, тільки їх змінювати не можна.Це лише один я у цьому реченні не бачу логіки?
Так зрозуміліше?
Цитата: Володимир Лісівка від 2009-11-21 02:20:06Здається, я натякав на зворотнє, тож Вам варто було вигадати щось подібне до:Код: [Вибрати]x = 3foo = xbar = x := 5 — уявімо, що в нас є оператор присвоєння :=, а х — зміннаmain = do print foo bar print fooі запустивши цей витвір отримати35Код: [Вибрати][vlisivka@apollo gjs-ліниві обчислення]$ cat test.js#!/usr/bin/gjs --include-path=.Const print=imports.log.g_log;var x=function() 3;const foo=function() x();const bar=function() { x=function() 5; };print(foo());bar();print(foo());[vlisivka@apollo gjs-ліниві обчислення]$ ./test.js35Так краще? :-)Цитата: Жорж від 2009-11-21 12:25:20ЦитатаЦе не зовсім те, тому що у Хаскелі обчислення ліниві (як Future в Яві), але зрозуміти буде легше. До речі, змінні які не змінюються після ініціалізації є не тільки в Хаскелі:Future — то не ліниві обчислення; навіть якщо воно не знадобиться, Future буде обчислене повністю.Future — це інтерфейс, а ви говорите про реалізацію — FutureTask. Суть моєї ідеї в тому, що при виклику функції замість обчислення значення і повернення результату негайно, можна повертати Future, яке обчислюється потім, коли (якщо) викличуть Future.get(). Можна використовувати і Callable, але Future має перевагу в тому, що, при необхідності, можна задіяти FutureTask і рахувати в декілька потоків, якщо на сервері декілька процесорів, що значно зменшує час відклику системи без зміни логіки програми. Якби санки зробили Future розширенням Callable (або хоча б однаково назвали методи), було б значно простіше.Цитата: Жорж від 2009-11-21 12:25:20ЦитатаЦитата: Жорж від 2009-11-21 01:18:00тож краще їх змінними не називати.І як же ж треба називати змінну частину функції?Ви про аргумент, чи ви математику ще не проходили?Так, про них. ( тільки s/частина/величина/). Їх, здається, Декарт ввів (і функції і змінні величини).АРГУМЕНТ, -у, ч. 1. Книжн. Підстава, доказ, які наводяться для обґрунтування, підтвердження чого-небудь. 2. Мат. Незалежна змінна величина.Цитата: Жорж від 2009-11-21 12:25:20ЦитатаЯкий такий шок? Шок від того, що звичний досвід програмування при застосуванні до чистої лінивої мови може призводити до хибних висновків щодо швидкодії та потреб ресурсів причому у обидва боки — як до перебільшення, так і до применшення.Ну я знайомий з make вже років 15-ть і ніякого шоку в мене воно не виникає. Навпаки, я такий стиль люблю. Хоча він створює проблеми з відлагодженням, так як напр. виняткова ситуація може виникнути і буде оброблена в зовсім іншій підсистемі, порушуючи ізоляцію підсистем. Гібернейт з лінивими обʼєктами, які кидали помилки аж у шаблонах при надсиланні відповіді клієнту, попсув мені багато крові. :-)Цитата: Жорж від 2009-11-21 12:25:20Скажімо, чи багато з тих, хто тут обговорював необхідність чи недоречність мʼякого знака, одразу здогадаються, що такий дивний спосіб пошуку значення найменшого елемента списку, як сортування злиттям з подальшим вибором першого елемента матиме кількість операцій O(N), а не O(NlogN) як у алгоритму сортування, що буде використаний?У Хаскелі, це буде не сортування. Ви ж йому ставите ціль відібрати найменший елемент з двох, а не посортувати їх за рангом. Так само як "make foo.o" не компілює всю програму, хоча і знає як.
Здається, я натякав на зворотнє, тож Вам варто було вигадати щось подібне до:Код: [Вибрати]x = 3foo = xbar = x := 5 — уявімо, що в нас є оператор присвоєння :=, а х — зміннаmain = do print foo bar print fooі запустивши цей витвір отримати35
x = 3foo = xbar = x := 5 — уявімо, що в нас є оператор присвоєння :=, а х — зміннаmain = do print foo bar print foo
[vlisivka@apollo gjs-ліниві обчислення]$ cat test.js#!/usr/bin/gjs --include-path=.Const print=imports.log.g_log;var x=function() 3;const foo=function() x();const bar=function() { x=function() 5; };print(foo());bar();print(foo());[vlisivka@apollo gjs-ліниві обчислення]$ ./test.js35
ЦитатаЦе не зовсім те, тому що у Хаскелі обчислення ліниві (як Future в Яві), але зрозуміти буде легше. До речі, змінні які не змінюються після ініціалізації є не тільки в Хаскелі:Future — то не ліниві обчислення; навіть якщо воно не знадобиться, Future буде обчислене повністю.
ЦитатаЦитата: Жорж від 2009-11-21 01:18:00тож краще їх змінними не називати.І як же ж треба називати змінну частину функції?Ви про аргумент, чи ви математику ще не проходили?
ЦитатаЯкий такий шок? Шок від того, що звичний досвід програмування при застосуванні до чистої лінивої мови може призводити до хибних висновків щодо швидкодії та потреб ресурсів причому у обидва боки — як до перебільшення, так і до применшення.
Скажімо, чи багато з тих, хто тут обговорював необхідність чи недоречність мʼякого знака, одразу здогадаються, що такий дивний спосіб пошуку значення найменшого елемента списку, як сортування злиттям з подальшим вибором першого елемента матиме кількість операцій O(N), а не O(NlogN) як у алгоритму сортування, що буде використаний?
Код: [Вибрати][vlisivka@apollo gjs-ліниві обчислення]$ ./test.js35Так краще? :-)
[vlisivka@apollo gjs-ліниві обчислення]$ ./test.js35
Цитата: Володимир Лісівка від 2009-11-21 18:56:14Код: [Вибрати][vlisivka@apollo gjs-ліниві обчислення]$ ./test.js35Так краще? :-)Ви хотіли показати, що у джаваскрипті можливі ліниві обчислення? Але ж я, здається, ніде не писав, що це неможливо і не просив спростувати?
Здається, я натякав на зворотнє, тож Вам варто було вигадати щось подібне до:
Цікаво, навіщо мені вдруге показувати які фокуси можна робити зі змінними НЕ у Хаскелі, коли я кажу що У Хаскелі зробити щось певне не вдастся.
Цитата: Владислав Чижевський від 2009-11-21 11:31:22Цитата: yurchor від 2009-11-21 11:26:48Цитата: Владислав Чижевський від 2009-11-21 11:00:45Раніше розробники заявляли про цільову аудиторію проекту Федори. Цей реліз відповідає тим заявам?Абсолютно. Вони навіть за тиждень до випуску зробили так, щоб KDE 4 та GIMP на картках NVidia було неможливо користуватися. От блін, у мене картка від Nvidia Втіштеся, це було зроблено, щоб можна було користуватися qemu на картках Intel і ATi.
Цитата: Володимир Лісівка від 2009-11-21 17:13:41Так зрозуміліше?Так, але в цій мові програмування тоді це не змінна: вона ніколи не міняється, тоді й немає логіки її так називати, але це я так, думки в голос.
Величина, яка ніколи не міняється, називається константа.