Аватар для nullxdth
2305 / 1064 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
19.05.2015, 02:59
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Может быть, попытаешься найти в исходниках ответ на свой глупый вопросец?
Очевидно, что реализация стандартного filter не такая как у тебя и в скоупе нет имени result:
Error: undefined identifier result
А может быть ты, Лев Толостой, покажешь как в твоей реализации сделать так, что бы в скоупе оказался только number?

Добавлено через 2 минуты
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Ну я не виноват, что лисперы не могут решить проблему ромба в отличие от D-шников
В CLOS нет этой проблемы.

Добавлено через 12 минут
Dennis Ritchie, полистал сейчас phobos. Это просто пипец. Punks not dead. Куча закомменченных сорцов и сплошные комменты - Not yet implemented. Код написан отвратно. 15 лет языку. Это победа, я считаю
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.05.2015, 02:59
Ответы с готовыми решениями:

Common Lisp vs D
Может быть, попробуем затеять холиварчик. Чтобы было менее честно, можно противопоставлять языку D все языки семейства лисп. Чтобы было...

C++ vs Common Lisp: кодогенерация, метапрограммирование
Дано описание произвольного математических выражений на XML вида: <calc> <mul> <var>k</var> ...

Книги или другой источник, где описана история версий Lisp и Common Lisp
Доброго времени суток.Такой вопрос,знаете какой-нибудь источник,где описана история версий Lisp и Common Lisp.Только не всякие...

133
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
19.05.2015, 03:16
Цитата Сообщение от nullxdth Посмотреть сообщение
Очевидно, что реализация стандартного filter не такая как у тебя и в скоупе нет имени result:
Боюсь, что твой мозг не потянет настоящий filter!
Цитата Сообщение от nullxdth Посмотреть сообщение
А может быть ты, Лев Толостой, покажешь как в твоей реализации сделать так, что бы в скоупе оказался только number?
Я круче, чем Лев Толстой и Пушкин, поэтому реализовал фичу в одно строку! Учись, лиспер:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import std.stdio, std.string;
 
int[] filter(string predicate)(in int[] numbers) {
    
    static assert(predicate.split[0] == "number");
    
    int[] result;
    
    foreach (number; numbers) {
        if (mixin (predicate)) {
            result ~= number;
        }
    }
 
    return result;
}
 
void main() {
 
    int[] numbers = [ 1, 8, 6, -2, 10 ];
    
    int[] chosen = filter!"result == [ 1, 8, 6 ]"(numbers);
    
    writeln(chosen);
}
http://rextester.com/TNY10933
Цитата Сообщение от nullxdth Посмотреть сообщение
полистал сейчас phobos.
На github'e листал?
Цитата Сообщение от nullxdth Посмотреть сообщение
Куча закомменченных сорцов и сплошные комменты - Not yet implemented.
А что в этом плохого?

Не по теме:

Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
покажешь как в твоей реализации сделать так, что бы в скоупе оказался только number?
Подчинительный союз чтобы в данном случае можно заменить составным союзом для того чтобы, поэтому в данном случае чтобы пишется слитно. Уяснил?

0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
19.05.2015, 07:16
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
поэтому реализовал фичу в одно строку!

паааарсить выражение таким образом - это сильно! Вместо ограничения скоупа Дениска ограничивает программистов в написании предиката... Ему так удобнее... А если там будет что-то вроде
C++
1
fabs(number) > x
?
Или
C++
1
number != number + 1 && result != [1, 8, 6]
?

В общем, это костыль костылей. Ну да для D - сойдёт.

Добавлено через 1 минуту
http://rextester.com/THII61903
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
19.05.2015, 08:25
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Какую полезную работу можно делать на лиспе?
а ты у Новака спроси. он же листер по твоему. от пусть и доказывает что он лиспер.

Не по теме:

Цитата Сообщение от nullxdth Посмотреть сообщение
phobos. Это просто пипец
так там же всё такое
основная либа не зря зовется phobos, что в переводе страх.
да я язычек в реале не digital mars, а циферный марс срам

0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
19.05.2015, 10:50
C++
1
int[] filter(string predicate)(in int[] numbers) {


Для каждого типа заново писать фильтр?
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
19.05.2015, 14:27
korvin_, ну это поправимо. Куда хуже то, что скоуп неограничен

http://rextester.com/EOXVW95995

Добавлено через 6 минут
Собственно, можно так.
Но это тоже бред...

http://rextester.com/JOLD76412

Добавлено через 2 минуты
В нормальном языке я применил бы обычный плюсовый подход, вроде того:
http://rextester.com/XNDFY20437

Но это же не Денискин путь, ему нужно генерить функцию из строки, это же миксины, это же круто...
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
19.05.2015, 15:58
Цитата Сообщение от FraidZZ Посмотреть сообщение
ну это поправимо. Куда хуже то, что скоуп неограничен
Угу, просто про скоуп уже писали. + Как я понимаю, пользователь такого «фильтра» вынужден будет догадываться, какое там имя должно быть у переменной? И, т.к. оно жестко вшито, то перекроет переменную с таким же именем или что? В общем, да, Дэ-нискин путь такой путь. =)
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
19.05.2015, 17:09
korvin_, да-да. Потому есть вариант генерить миксином литерал функции из строки, но опять же. Либо передавать имя ещё одним параметром, либо хз как там.

Овчинка не стоит выделки.

Добавлено через 4 минуты
Есть вариант использовать общую часть объявления
C++
1
function bool
как вшитый в шаблон параметр, но это уже костыли верхом на велосипеде.

http://rextester.com/PKTDT31004
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
19.05.2015, 17:17
Я правильно понял, что миксины, по-лисповому говоря, негигиеничные, и что gensym-а нет?
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
19.05.2015, 17:32

Не по теме:

helter, как не для лиспера лучше расшифруй)



Добавлено через 3 минуты
Про gensym почитал. Не думаю, что это есть в D, но это легко реализуется в Руби.

Добавлено через 6 минут
Вроде того:
Ruby
1
2
3
4
5
6
7
class Gensym
    @@symbolCounter = 0
    def Gensym.next
        @@symbolCounter += 1
        ("G" + @@symbolCounter.to_s).to_sym 
    end
end
Только мне сложно придумать этому практическую область применения - по крайней мере, в самом Руби
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
19.05.2015, 17:40
В негигиеничных макросах могут захватываться окружающие символы, что может приводить к конфликтам. По идее, об этом надо подробно говорить, но я только приведу пример (из Let Over Lambda - там, соответственно, есть подробно). Пусть макрос nif (numeric if) возвращает результат одного из трёх выражений в зависимости от знака аргумента. Наивная реализация такая:
Lisp
1
2
3
4
5
(defmacro nif-buggy (expr pos zero neg)
  `(let ((obscure-name ,expr))
     (cond ((plusp obscure-name) ,pos)
           ((zerop obscure-name) ,zero)
           (t ,neg))))
где результат вычисления выражения expr сохраняется во вспомогательной переменной obscure-name. Вот пример, во что этот макрос может раскрываться
Lisp
1
2
3
4
5
(nif-buggy (+ a b) "positive" "zero" "negative")
=>
(LET ((OBSCURE-NAME (+ A B)))
  (COND ((PLUSP OBSCURE-NAME) "positive") ((ZEROP OBSCURE-NAME) "zero")
        (T "negative")))
Однако если в клаузах есть символ obscure-name, могут быть конфликты. Например,
Lisp
1
2
3
4
5
6
(let ((obscure-name "positive"))
  (nif-buggy
    100 
    obscure-name
    "zero"
    "negative"))
должно бы вычислиться в "positive", но из-за конфликта возвращается 100. Функция gensym генерирует символы, которые не приведут к конфликтам.
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
19.05.2015, 17:43
helter, угу, ясно. В Руби это действительно не найдёт применения, так как там нет макросов. А функции и блоки обладают закрытыми скоупами.

Миксины же D просто вставляют вычислимую на этапе компиляции строку в исходник. Так что ни о каких закрытых скоупах и речи быть не может)
Нет, всё же не совсем так. Строка должна быть синтаксически законченным выражением на D
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
19.05.2015, 17:44
Да, вот неглючное определение:
Lisp
1
2
3
4
5
6
(defmacro nif (expr pos zero neg)
  (let ((g (gensym)))
    `(let ((,g ,expr))
       (cond ((plusp ,g) ,pos)
             ((zerop ,g) ,zero)
             (t ,neg)))))
Обратная кавычка ` задаёт "шаблон", а символ, перед которым стоит запятая - подставляется в шаблон. Например, если a равно 3, то `(1 2 ,a) есть (1 2 3).

Добавлено через 1 минуту
А макрос - это просто обычная функция, которая преобразует код где-то во время компиляции. Ведь код есть данные, и макрос просто перекраивает списки.
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
19.05.2015, 17:50
helter, жаль, что не могу здесь поставить спасибо. Инфа действительно интересная.

Добавлено через 4 минуты
Что интересно - на офф.сайте D написано следующее:
C macros cut across all scopes. This problem is called being not "coding hygenic". Mixins follow the usual scoping rules, and is hygenic.
А наблюдается обратное.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
19.05.2015, 17:59
Цитата Сообщение от FraidZZ Посмотреть сообщение
This problem is called being not "coding hygenic".
Как обычно, проблема не в отсутствии гигиены, а в программистах. Даг Хойт (автор Let Over Lambda) о гигиеничных макросах: "It is a lot harder to shoot yourself in the foot when your hands are tied behind your back."
0
 Аватар для nullxdth
2305 / 1064 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
19.05.2015, 18:08
Цитата Сообщение от helter Посмотреть сообщение
Как обычно, проблема не в отсутствии гигиены, а в программистах.
Ага, но совершенно не ясно как загенсимить или каким-нибудь образом ограничить scope в D. Всё усложняется ещё и тем, что конструкция создающая scope в D - это statement.

Добавлено через 5 минут
Но я почти уверен, что в D как-то можно это сделать, развернуть миксин в лямбде без замыканий, например. Но такое-то метапрограммирование из приятного занятия в Lisp превращается а адову ссанину в D.
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
19.05.2015, 18:14
Цитата Сообщение от nullxdth Посмотреть сообщение
Но я почти уверен, что в D как-то можно это сделать, развернуть миксин в лямбде без замыканий, например.
Да вот так, я уже показывал вроде:
http://rextester.com/JOLD76412

Правда, к скоупу самого миксина это не имеет отношения. Просто литерал функции не захватывает переменные из внешнего: http://rextester.com/ZQX2886
0
 Аватар для nullxdth
2305 / 1064 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
19.05.2015, 18:16
Цитата Сообщение от FraidZZ Посмотреть сообщение
Да вот так, я уже показывал вроде
Ага, точно. Только:
Code
1
function bool(string a) {return ... }
должен быть в принимающей миксин функции.
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
19.05.2015, 18:40
Так что вариант Дэ-ниски можно оптимизировать как-то так. Но выглядит всё равно мерзко и запитано от костылей.
http://rextester.com/OFEVBM18747

Добавлено через 1 минуту
nullxdth, я и так делал. Тогда встаёт вопрос как передавать имя входной переменной. Вот, ссылкой выше я сделал передачей в шаблон ещё одного параметра. Но всё равно - это же такая кривизна подхода. А кто-то этим гордится

Добавлено через 1 минуту
Цитата Сообщение от nullxdth Посмотреть сообщение
Code
1
function bool(string a)
Вопрос - как варьировать имя переменной a ? Только обернув всю функцию в миксин... монструозность.

Добавлено через 19 минут
Или так: http://rextester.com/YKBCE95197
Я бы сказал, чем там пахнет. Но так как D, пояснения не нужны.
0
 Аватар для nullxdth
2305 / 1064 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
19.05.2015, 18:52
Цитата Сообщение от FraidZZ Посмотреть сообщение
Да не, можно что-нить покрасивее, например: http://rextester.com/GSMB5015
Ну и it протащить параметром, как ты это сделал (по-уродски, строчным литералом).

Добавлено через 3 минуты
Цитата Сообщение от nullxdth Посмотреть сообщение
Да не, можно что-нить покрасивее, например: http://rextester.com/GSMB5015
Кстати, не понятно почему это работает, ведь function теоретически не должен ничего замыкать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.05.2015, 18:52

Common lisp
кто поможет решить эти задачи? Перечитайте правила форума. Один вопрос - одна тема. Заголовок темы должен быть осмысленным и...

Common Lisp
Подскажите пожалуйста, а может Common Lisp формировать списки из функций, и (если вдруг может) как?

Common lisp
Есть фрагмент программы: (defun game(x y) (cond (( < x y)(print "menshe")(setq y (read))) (( > x y)(print "bolshe")(setq y...

ООП Common Lisp
Помогите пожалуйста! Реализовать класс: Программа (название, тип, сфера применения, язык программирования, ...) Класс должен иметь...

Программа на common lisp
Программа на common lisp Прочитать беззнаковое целое число из стандартного потока ввода и в каждом байте числа обнулить нулевой и седьмой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Опции темы

Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru