Здравствуйте, кт, Вы писали:
кт>в библиотеке выполнения известен адрес. А то, что я хотел вывести именно как X, а не как Y довольно сложно определить, поскольку имеется только содержимое указателя P. кт>А здесь никаких заморочек не надо — внутри программы автоматически запишется "X=" и дело с концом.
Прочитай статью три раза внимательно. После этого поймёшь, что возможности PL/1 по сравнению с немерле просто несравнимы.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[10]: О специализированных операторах ввода-вывода
Здравствуйте, Privalov, Вы писали:
P>Стандарт языка не требует разве? P>Вот найдется вдруг какая-нибудь ценная программа, которая 40 лет на ленте пролежала и которую срочно надо запустить. А в ней такое: P>
Здравствуйте, WolfHound, Вы писали:
WH>Прочитай статью три раза внимательно. После этого поймёшь, что возможности PL/1 по сравнению с немерле просто несравнимы.
так как в Немерле получить текст вывода "x=1280 y=1024" если x,y — целые?
У автора достаточно строки put data(x,y);
а в Немерле как будет выглядеть аналогичная строка?
Re[11]: О специализированных операторах ввода-вывода
Здравствуйте, кт, Вы писали:
кт>так как в Немерле получить текст вывода "x=1280 y=1024" если x,y — целые? кт>У автора достаточно строки put data(x,y); кт>а в Немерле как будет выглядеть аналогичная строка?
Вот прямо так и будет. Нужно только библиотеку написать.
тест
using System.Console;
using PL1.Macro;
module Program
{
Main() : void
{
def x = 1280;
def y = 1024;
put data(x, y);
put data(x, y, x + y, x.ToString() + "asd");
_ = ReadLine();
}
}
результат:
x=1280 y=1024
x=1280 y=1024 x + y=2304 x.ToString() + "asd"=1280asd
библиотека:
using Nemerle;
using Nemerle.Compiler;
using Nemerle.Compiler.Parsetree;
using System.Collections.Generic;
using System.Linq;
namespace PL1.Macro
{
public macro PutData(args)
syntax ("put", "data", args)
{
PutDataImpl.Impl(args)
}
module PutDataImpl
{
public Impl(args : PExpr) : PExpr
{
match (args)
{
| PExpr.Tuple as args =>
def code = List();
foreach (arg in args.args)
{
code.Add(<[ $(arg.ToString()) ]>);
code.Add(<[ "=" ]>);
code.Add(arg);
code.Add(<[ " " ]>);
}
code.RemoveAt(code.Count - 1);
def code = code.Aggregate((a1, a2) => <[ $a1 + $a2 ]>);
<[ System.Console.WriteLine($(code)) ]>
| _ => PExpr.Error(args.Location, "Tuple expected.")
}
}
}
}
Здравствуйте, Privalov, Вы писали:
P>Автор статьи пишет, что иногда нужно анализировать данные на распечатке. Мне такую ситуацию пердставить сложно. В 2016 году анализировать лог на бумаге просто неудобно.
Порой очень удобно. Помечать, стрелки рисовать, кружочки. ))
Любая высокоскоростная динамика отлаживается только по логам.
P>Поиск по ним не сделаешь. А современные логи — штука весьма объемная.
Фильтрацию зато сделаешь. А результат распечатаешь.
Re[7]: О специализированных операторах ввода-вывода
Здравствуйте, vdimas, Вы писали:
V>Порой очень удобно. Помечать, стрелки рисовать, кружочки. )) V>Любая высокоскоростная динамика отлаживается только по логам.
Ни разу не приходилось. Вот фрагменты исходников печатал. И в них рисовал кружочки и стрелочки. Иногда в распечатках можно заметить то, что не видно в IDE.
V>Фильтрацию зато сделаешь. А результат распечатаешь.
В прошлом проекте у нам внедрили неплохую систему работы с логами. Там все операции проводились, как с нормальной БД: фильтрция, поиск по массе критериев. Печатать не нужно было ничего.
Re[11]: О специализированных операторах ввода-вывода
Здравствуйте, pestis, Вы писали:
P>Мужик отстал от паровоза лет на 20, по ходу он про монаду I/O даже и не подозревает.
Точно! и эти, как их... ленивые вычисления не применил. А уж без привлечения монад отладочная печать с именами — все равно как пиво без водки, кино без Гоши Куценко и кучка дерьма без горки!
Re[12]: О специализированных операторах ввода-вывода
ОК. Но есть нюанс.
PUT DATA — в примере для простоты. А вообще-то это оператор вывода PUT.
Поэтому реальная форма будет чуть посложнее, например PUT FILE(F21) SKIP(2) DATA(x,y);
Т.е. может быть еще имя файла, число пропусков строк (в произвольном порядке).
Так что и библиотека будет чуть посложнее.
А так все правильно. Но ведь и в статье это названо мелочью. Кстати, а как насчет вывода не скаляров?
Т.е. а остальные примеры из статьи?
Re[12]: О специализированных операторах ввода-вывода
P>Если мы предмет обсуждения подменяем описанием его свойств, значит, он реализован?
Может я в тему не врубаюсь?
Вот пример примитивной "базы данных", допустимый в стандарте "G":
declare
1 карточка,
2(имя,
отчество,
фамилия) char(30) var,
2 возраст fixed(7),
2 дурак_ли_выпить bit,
бд file,
номер_карточки fixed(31);
open file(бд) update record direct keyed title('любители_выпить.dat');
имя ='Иван';
отчество ='Иванович';
фамилия ='Иванов';
возраст =50;
дурак_ли_выпить=нет;
Здравствуйте, кт, Вы писали:
P>>Если мы предмет обсуждения подменяем описанием его свойств, значит, он реализован? кт>Может я в тему не врубаюсь? кт>Или вопрос был не на эту тему?
Я просто спросил, реализован ли ISAM в этой версии PL/1. Вместо ISAM я мог бы написать BDAM, суть от этого не поменялась бы. Просто -есть или нет? Ответ на этот вопрос не должен вызывать затруднений. Просто — да или нет.
Re[14]: О специализированных операторах ввода-вывода
Здравствуйте, Privalov, Вы писали:
P>Я просто спросил, реализован ли ISAM в этой версии PL/1. Вместо ISAM я мог бы написать BDAM, суть от этого не поменялась бы. Просто -есть или нет? Ответ на этот вопрос не должен вызывать затруднений. Просто — да или нет.
Грибных лесов в Европе нет (с). Индексно-последовательных файлов в смысле IBM360 с их регионами и сблокированными записями в стандарте "G" нет.
Re[15]: О специализированных операторах ввода-вывода
Здравствуйте, кт, Вы писали:
кт>Грибных лесов в Европе нет (с). Индексно-последовательных файлов в смысле IBM360 с их регионами и сблокированными записями в стандарте "G" нет.
Примерно такой ответ я себе и представлял. С просто "да или нет" — проблемы.
Здравствуйте, pestis, Вы писали:
P>Мужик отстал от паровоза лет на 20, по ходу он про монаду I/O даже и не подозревает.
Отстал-то он похоже лет на 40. Но к чему монады
Re[3]: О специализированных операторах ввода-вывода
Здравствуйте, pagid, Вы писали:
P>>Мужик отстал от паровоза лет на 20, по ходу он про монаду I/O даже и не подозревает. P>Отстал-то он похоже лет на 40. Но к чему монады
Не все приняли тот факт, что еще в 80-е PL/1 был вытеснен Фортраном и Коболом.
Re[4]: О специализированных операторах ввода-вывода
Здравствуйте, Privalov, Вы писали:
P>Не все приняли тот факт, что еще в 80-е PL/1 был вытеснен Фортраном и Коболом.
Хотя в в 60-е PL/1 создавался для замены Фортрана и Кобола
Re[5]: О специализированных операторах ввода-вывода
Здравствуйте, кт, Вы писали:
кт>ОК. Но есть нюанс.
Нет никаких нюансов.
кт>А так все правильно. Но ведь и в статье это названо мелочью.
Вся статья детский сад штаны на лямке.
Там нет ничего что не может сделать толковый школьник на немерле за вечер.
И на научную статью она вообще никак не тянет. Максимум пост в бложике.
кт>Кстати, а как насчет вывода не скаляров? https://github.com/rsdn/nemerle/wiki/Macros-tutorial
Прочитай внимательно. Там есть код, который решает почти идентичную задачу.
кт>Т.е. а остальные примеры из статьи?
Это тебе в качестве домашнего задания.
Если хочешь, чтобы я с тобой дальше разговаривал тебе придётся продемонстрировать что ты хочешь узнать что-то новое, а не тупо защищаешь статью.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[14]: О специализированных операторах ввода-вывода
Здравствуйте, WolfHound, Вы писали:
WH>Нет никаких нюансов.
Есть ньюанс. Представленный здесь пример на Немерле (спасибо за потраченное время) годится только для частного случая выдачи на экран.
WH>Вся статья детский сад штаны на лямке. WH>Там нет ничего что не может сделать толковый школьник на немерле за вечер. WH>И на научную статью она вообще никак не тянет. Максимум пост в бложике.
так редакция ее и не напечатала. А толковый школьник может сделать и не в Немерле, а еще как-нибудь.
WH>https://github.com/rsdn/nemerle/wiki/Macros-tutorial WH>Прочитай внимательно. Там есть код, который решает почти идентичную задачу.
почти да не совсем
WH>Это тебе в качестве домашнего задания.
Спасибо, не надо, я не работаю с Немерле, а в PL/1 уже есть готовое.
WH>Если хочешь, чтобы я с тобой дальше разговаривал тебе придётся продемонстрировать что ты хочешь узнать что-то новое, а не тупо защищаешь статью.
Я вообще-то просто обещал человеку выложить все его старые тексты (это последний), а не с кем-то разговаривать. И то лишь потому, что редакция почти по-хамски ничего ему не отвечала больше года.
Среди текстов есть и слабые, точнее мелкие вроде этого. И, не скрою, пытался защищать "честь предприятия".
А нового чего узнать в данном случае? Что можно достать имя переменной в строку? Да пожалуйста. Для этого три раза статью читать не требуется