действительно ли возможно распечатать все сокращения Haskell - использование WinHugs?

Сначала создайте словарь, который отображает каждый термин на его id . Затем используйте словарь для создания желаемых списков:

from collections import Counter
a=['a','a','a','a','b','a','b','a','b','a','b','a','b','a','b','a','b','c','c','c','c','c','c','c','c','d','d','e']
b=['a','a','b','a','b','a','b','a','b','d','e']
aCounter=Counter(a)
bCounter=Counter(b)
v=sorted(aCounter.keys()|bCounter.keys())
idDict={item:i for i,item in enumerate(v) }


bresult=[(idDict[item[0]],item[0],item[1]) for item in bCounter.items()]
aresult=[(idDict[item[0]],item[0],item[1]) for item in aCounter.items() ]
print(bresult)
print(aresult)

Вывод:

[(0, «a», 5), (1, «b», 4), (3, «d», 1), (4, «e», 1)]
[(0, «a», 10), (1, «b», 7), (2, «c», 8), (3, «d», 2), (4, «e», 1) ]

Объединение выполняется с использованием | оператор. используйте sorted для присвоения id = 0 для 'a'

6
задан stites 2 January 2016 в 06:37
поделиться

3 ответа

Некоторые идеи:

  1. Параметр командной строки отладки (с которым можно установить :set +d в Объятиях), является информативным, но является очень подробным и не показывает Вам сокращения синтаксиса Haskell.

  2. Судите Hat - Трассировщик Haskell. Я просто попробовал его на простой программе, и это довольно прохладно. Я не нахожусь в Windows, тем не менее, и я не знаю, как трудный это должно было бы получить его выполнение. Это, вероятно, довольно трудно, который является позором, так как здорово и по существу что Вы хотите. Если Вы действительно получаете его выполнение, можно получить что-то вроде этого информация от Hat:

    main = {IO}
    teneven = [2,4,6,8,10]
    _foldr (\..) [1,2,3,4,5,6,7,8, ...] [] = [2,4,6,8,10]
    (\..) 1 [2,4,6,8,10] = [2,4,6,8,10]
    (\..) 2 [4,6,8,10] = [2,4,6,8,10]
    (\..) 3 [4,6,8,10] = [4,6,8,10]
    (\..) 4 [6,8,10] = [4,6,8,10]
    (\..) 5 [6,8,10] = [6,8,10]
    (\..) 6 [8,10] = [6,8,10]
    (\..) 7 [8,10] = [8,10]
    (\..) 8 [10] = [8,10]
    (\..) 9 [10] = [10]
    (\..) 10 [] = [10]
    

    Лямбда там even. Кроме того, если Вы хотите, Hat может проследить в вызовы foldr и другие внутренние вызовы; по умолчанию это не делает этого.

5
ответ дан 9 December 2019 в 20:50
поделиться

Верьте мне, Вы не хотите идти этим путем.

Набор (и порядок) сокращений, используемых в каждом особом случае, зависел бы от конкретной реализации языка (объятия могли сделать это один путь, ghci - другим способом, jhc - в еще одном, и т.д.).

Лучше считайте что-то об общих способах реализовать compiler/interpreter/virual машину для функционального языка - как машина SECD и т.д.

Несколько ссылок:

2
ответ дан 9 December 2019 в 20:50
поделиться

Здесь у вас есть несколько примеров использования Debug.Trace и Hugs.Observe.

import Debug.Trace
fact :: Integer -> Integer
fact 0 = trace "fact 0 ->> 1" 1
fact n = trace ("fact " ++ show n) (n * fact (n-1))


import Hugs.Observe
fact :: Integer -> Integer
fact 0 = observe "fact 0" 1
fact n = observe "fact n" (n *  fact (n-1))

Надеюсь, это поможет вам понять, как распечатать все сокращения с помощью WinHungs.

5
ответ дан 9 December 2019 в 20:50
поделиться
Другие вопросы по тегам:

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