Действительно ли возможно Повернуть эту рекурсивную функцию haskell в вызов карты?

Вы можете попробовать это:

SELECT TestId,
       Start,
       End,
       Testtime,
       SUM(Testtime) OVER (ORDER BY TestId ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
       1000 - SUM(Testtime) OVER (ORDER BY TestId ROWS BETWEEN AND UNBOUNDED PRECEDING AND CURRENT ROW)
FROM MyTable

Для SQL Server 2005 вы можете использовать JOIN для этого:

select t1.testid,
       t1.start, 
       t1.end, 
       DATEDIFF(hour, t1.Start, t1.End), 
       sum(DATEDIFF(hour, t2.Start, t2.End)), 
       1000 - sum(DATEDIFF(hour, t2.Start, t2.End))
from MyTable t1
join MyTable t2 on t1.testid >= t2.testid
group by t1.testid, t1.start, t1.end, t1.Start, t1.End
7
задан HaskellElephant 25 December 2011 в 21:49
поделиться

2 ответа

Посмотрите на тип map. Это (a -> b) -> [a] -> [b]. Это не похоже на Ваш тип, который является-> b. Это не карта, это - сгиб.

Функция высшего порядка, на которую Вы хотите посмотреть, foldr. См. Hoogle.

Что-то как...

htmlHAtendimento :: [HoraAtendimento] -> Html
htmlHAtendimento [] = toHtml ""
htmlHAtendimento l = foldr1 (+++) $ intersperse ", " $ map f l
  where f (da, hia, hfa) = toHtml da
                           +++ "feira "
                           +++ show hia
                           +++ "h - "
                           +++ show hfa
                           +++ "h"

Я не знаю, корректно ли это, но это находится в правильном направлении.

12
ответ дан 6 December 2019 в 15:36
поделиться

Вы хотите свернуться по непустому списку. Этот код мог бы добиться цели:

type HoraAtendimento = (String, Int, Int)

htmlHAtendimento :: [HoraAtendimento] -> Html
htmlHAtendimento [] = toHtml ""
htmlHAtendimento l = foldl1 (+++) $ map convert l
  where convert (da,hia,hfa) = toHtml da +++ "feira " +++
                               show hia +++ "h - " +++ show hfa +++ "h"
2
ответ дан 6 December 2019 в 15:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: