Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Питання з Scheme

Автор Demetrius, октября 28, 2011, 14:31

0 Пользователи и 1 гость просматривают эту тему.

Demetrius

Напишу це тут, може, пан Python чи ще хтось мені щось порадить. :-[

Я ось почав вивчати Scheme. Ну, вона ніби проста, але все одно вивчати є що.

В мене часто потрібно, щоб функція приймала параметр, який потрібен для рекурсивних викликів, але непотрібен в інших випадках. Ось, наприклад, як я можу реалізувати функцію, яка б сшивала список рядків у один рядок:

#!/usr/bin/guile -s
!#


(define (implode-with-head parts head delim)
  (if (eqv? parts '())
      head
      (implode-with-head (cdr parts)
                         (string-append head delim (car parts))
                         delim)))

(define (implode parts delim)
  (if (eqv? parts '())
      ""
      (implode-with-head (cdr parts) (car parts) delim)))

(display (implode '("Hello" "world" "," "my" "name" "is" "Dmitry") ";"))
(newline)

; vim:filetype=scheme



Сам розумію, що некрасиво. Як це реалізувати ідіоматично?




І ще питання. Напевне ж такі функції, як split та join у Python'і та implode і explode в PHP вже є (або в стандартній бібліотеці, або ще десь). Як вони тут називаються?

Python

Якщо функція з додатковими параметрами не викликається з-за меж її самої, я б оформив це як «іменований let».

(define (implode parts delim)
  (if (eqv? parts '())
      ""
      (let loop ((parts (cdr parts)) (head (car parts)))
         (if (eqv? parts '())
            head
           (loop (cdr parts)
                 (string-append head delim (car parts)))))))
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Python

Offtop

І коли вже тут нарешті розпочнеться генеральна битва Scheme vs. CL vs. Clojure ?..
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Demetrius

Цитата: Python от ноября  2, 2011, 22:51
І коли вже тут нарешті розпочнеться генеральна битва Scheme vs. CL vs. Clojure ?..
Не скоро. Тим бiльше, що myst образився й пiшов, отож нема кому захищати CL.

Python

Тоді тільки Scheme й Clojure лишаються. Але Clojure, без сумніву, переможе.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Demetrius

Цитата: Python от ноября  2, 2011, 23:19
Тоді тільки Scheme й Clojure лишаються. Але Clojure, без сумніву, переможе.
А їм обов'язково влаштовувати битву? Менi здавалося, що вони дещо в рiзних категорiях:  Scheme—загальна iдея, багато реалiзацiй, без обмежень на середовище, Clojure—саме конкретна реалiзацiя на основi Java, cxu ne? Може, логiчнiше було б казати про битву Clojure та певних реалiзацiй Scheme?


Так й взагалi, що значить «переможе»? Переможе за якими критерiями? По компактностi Clojure явно не обiйде TinyScheme. :eat:

Python

Компактність транслятора в наші дні — річ другорядна, програми на дискетах вже ніхто не зберігає. Значення має можливість практичного застосування. Clojure тут виграє за ширшим набором засобів, навіть якщо не використовувати прямого доступу до ӂава-класів. У Scheme ж постійно доводиться майструвати велосипеди, тому програми виходять довшими.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Python

Цитироватьбез обмежень на середовище
У мене склалось враження, що JVM за портабельністю явно випереджає будь-які кросплатформні мови програмування. Відмінності в реалізаціях типових трансляторів однієї мови на різних платформах стають відчутними у будь-якій більш-менш серйозній програмі.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Demetrius

Цитироватьможливiсть практичного застосування
До речi, а чим тут може похвалитися Clojure? Он, TinyScheme в GIMP'i використовують, наприклад. А Clojure?

Цитата: Python от ноября  3, 2011, 16:10
Цитироватьбез обмежень на середовище
У мене склалось враження, що JVM за портабельністю явно випереджає будь-які кросплатформні мови програмування. Відмінності в реалізаціях типових трансляторів однієї мови на різних платформах стають відчутними у будь-якій більш-менш серйозній програмі.
А як же embedded платформи?

Python

Ну, це молода мова, і у неї ще все попереду. Хоча завдяки інтегрованості в JVM використовувати її можна як альтернативу чи доповнення до ӂави. Якщо ж говорити про відомі існуючі проекти на цій мові, Clojure використовується в одному з компонетів Twitter.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Python

ЦитироватьА як же embedded платформи?
Маю сумнів, що мови з динамічню типізацією є ідеальним рішенням для цих систем. А втім, дивлячись що мається на увазі під embedded, бо нині багато мобільних пристроїв мають вищі обчислювальні характеристики, ніж мій комп'ютер. На таких пристроях Java також здебільшого підтримується, і прикладний софт для них пишеться або на джаві, або на інших мовах для JVM.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Demetrius

Тобто ви вважаєте, що мені краще вивчати не Схему, а Клоӂуру?

Python

Чому ні? Дивлячись які задачі ви ставите. Схема існує довше — а отже, існує й більше реалізацій для неї, у т.ч. й таких, що мають практичне застосування. У ряді проектів її використовують як мову скриптів. Клоӂура — нове явище, сфера її застосування ще не сформувалась толком, хоча мова виглядає досить перспективною. Для задач загального призначення Clojure видається зручнішим інструментом. Хоча вчити Lisp-подібні мови я все ж радив би починати зі Scheme (за умови, якщо відкинути такі її дивацтва, як define-syntax) — мова проста, ключові слова та синтаксис інтуїтивно зрозуміліші (хоча й менш лаконічні).
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр