Вверх ↑
Этот топик читают: Гость
Ответов: 5446
Рейтинг: 323
#1: 2009-06-05 22:07:38 ЛС | профиль | цитата
Делаю пакет для Python, столкнулся с проблемкой - не получается в Math "протащить" значение Op1 или Op2 из потока.

Схема:
code_13610.txt

Для справки:

hiFor.hws:
code_13611.txt

hiMath.hws:
code_13612.txt

Получается такой код на Python-е:
code_13613.txt

Где я что упустил?
карма: 1

0
файлы: 4code_13610.txt [472B] [192], code_13611.txt [467B] [186], code_13612.txt [2.3KB] [193], code_13613.txt [413B] [217]
Ответов: 215
Рейтинг: 45
#2: 2009-06-06 00:30:46 ЛС | профиль | цитата
в hiMath поправь:

...
func BuildExp(_data)
...
func doOperation(_data)
fvar(s)
s = BuildExp(_data)
...
карма: 0

1
файлы: 1code_13615.txt [104B] [141]
Голосовали:iarspider
Ответов: 5446
Рейтинг: 323
#3: 2009-06-06 01:29:34 ЛС | профиль | цитата
lev, спасибо, но это не помогло. Новый hiMath.hws:

code_13616.txt

Модифицированный (для отладки) Echo:
code_13617.txt

В окне отладки:
code_13618.txt


------------ Дoбавленo в 02.20:
Забыл добавить полученный код:


#!/usr/bin/python
# -*- coding: CP866 -*-
#-----------------------------------------------------
# Project2.py
#-----------------------------------------------------

# Global vars
# Functions


# Program body
if __name__ == "__main__":
for counter1 in range(1,6):
print("")
print("It is done...")


# Created with HiAsm studio "4.2 build 178" (http://www.hiasm.com)
карма: 1

0
файлы: 3code_13616.txt [1.9KB] [185], code_13617.txt [183B] [190], code_13618.txt [197B] [208]
Ответов: 215
Рейтинг: 45
#4: 2009-06-06 02:39:54 ЛС | профиль | цитата
у меня работало и работает
в аттаче мои элементы
мой результат:

for counter1 in range(1,6):
res2 = 0
print(counter1 - 1)
print("done")
карма: 0

1
файлы: 1py_code.rar [1.6KB] [80]
Голосовали:iarspider
Ответов: 5446
Рейтинг: 323
#5: 2009-06-06 06:17:05 ЛС | профиль | цитата
Аттач потерялся
------------ Дoбавленo в 23.00:
Нашёлся Взял твой код, всё равно фигня какая-то. Вот текущая версия пакета: <del>
------------ Дoбавленo в 23.31:
Вроде пробился. Судя по всему, что-то я в direct.inc не то написал изначально.
------------ Дoбавленo в 01.02:
Ан нет, оказалось всё куда интереснее. Простейший компонент - Echo. Код:

#hws
func doEcho(_data)
trace('[Echo] _data = ' && _data && ';' && typeof(_data))
// trace('[Echo] Message = ' && Message && ';' && typeof(Message))
println('print(', Message,')')
event(onEcho)
end

Если снять комментарий, то данные из потока в Message не попадут. Внимание, вопрос: а почему?
карма: 1

0
Гость
Ответов: 17029
Рейтинг: 0
#6: 2009-06-07 02:30:35 правка | ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2017-03-03 06:42:34
карма: 0

0
Ответов: 5446
Рейтинг: 323
#7: 2009-06-07 02:38:20 ЛС | профиль | цитата
Выше это я, для разделения сообщений...

Продолжаем разговор. Вот ещё схема:

#sha
Add(EntryPoint,2953706,147,161)
{
link(onStart,15236136:doFor,[])
}
Add(For,15236136,210,161)
{
Start=1
End=6
IncludeEnd=1
link(onEvent,525776:doOperation,[])
link(onStop,3218143:doEcho,[(254,174)(254,251)])
}
Add(Echo,3218143,266,245)
{
Message="It is done..."
}
Add(Math,525776,280,161)
{
OpType=9
Op2=3
ResultType=0
link(onResult,88180:doEcho,[])
}
Add(Echo,88180,357,161)
{
}

Она генерирует следующий код (очевидно, не соответствующий ожидаемому):

#!/usr/bin/python
# -*- coding: CP866 -*-
#-----------------------------------------------------
# Project3.py
#-----------------------------------------------------

# Global vars
import math
# Functions


# Program body
if __name__ == "__main__":
for counter1 in range(1,6):
print(math.fmod(0, 3))
print("It is done...")


# Created with HiAsm studio 4.2 build 178 (http://www.hiasm.com)

Отсюда два вопроса:
1. А где counter?
2. Почему истинно выражение

#hws
if ((typeof(Op1) = 7) or (typeof(Op2) = 7))
карма: 1

0
Гость
Ответов: 17029
Рейтинг: 0
#8: 2009-06-07 03:50:48 правка | ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2017-03-03 06:42:34
карма: 0

0
Ответов: 215
Рейтинг: 45
#9: 2009-06-07 04:02:41 ЛС | профиль | цитата
Чуток наврал с кодом, т.к. неопределённой переменной для других элементов может оказаться и вторая и т.д., но идея, думаю, понятна.

карма: 0

1
Голосовали:iarspider
Ответов: 5446
Рейтинг: 323
#10: 2009-06-07 06:12:30 ЛС | профиль | цитата
lev, если я правильно тебя понял, то для mod будет такой код ("универсальный"):

#hws
case 'mod':
fvar(t,u)
t=Op1
u=Op2
if((typeof(t) = 7) or (typeof(u) = 7))
need_math()
return('math.fmod(' && t && ', ' && u && ')')
else
return('(' && t && ') % (' && u && ')')
end

Так?
------------ Дoбавленo в 06.30:
Почти так. typeof всё равно 7 возвращает... Что не удивительно, ибо тип точки что для Op1, что для Op2 - real (7). Так что этот код даже не понадобится.
карма: 1

0
Ответов: 215
Рейтинг: 45
#11: 2009-06-08 16:58:57 ЛС | профиль | цитата
А как ты собираешься передавать в math-подобные элементы нули после запятой у чисел? Ведь hiasm их откидывает. Видимо, придётся вручную добивать нули к переменным в зависимости от ResultType, или точки в числе отлавливать, или переводить точки входа на тип String.
для интересующихся - в python'e 2/3=0, а 2.0/3=0.666666666667
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#12: 2009-06-08 17:53:22 ЛС | профиль | цитата
lev писал(а):
для интересующихся - в python'e

да не только в нем - во многих потомках С(как и в нем самом) результат операции деления определяется типом аргументов.
карма: 27
0
12
Сообщение
...
Прикрепленные файлы
(файлы не залиты)