Haskell için yeni biriyim ve bir scrabble çözücü yapmayı denedim. Şu anda sahip olduğunuz harfleri alır, bunların tüm permütasyonlarını bulur ve sözlük kelimeleri olanları filtreler. kodun oldukça basit: ben Python ile sahip çok benzer bir uygulamaya göre, inanılmaz derecede yavaş AncakNeden bu Haskell kodu çok yavaş?
import Data.List
main = do
dict <- readFile "words"
letters <- getLine
let dictWords = words dict
let perms = permutations letters
print [x | x <- perms, x `elem` dictWords]
. Yanlış yaptığım bir şey var mı?
* edit: İşte benim Python kod:
from itertools import permutations
letters = raw_input("please enter your letters (without spaces): ")
d = open('words')
dictionary = [line.rstrip('\n') for line in d.readlines()]
d.close()
perms = ["".join(p) for p in permutations(letters)]
validWords = []
for p in perms:
if p in dictionary: validWords.append(p)
for validWord in validWords:
print validWord
Ben tam bunları zaman aşımına yoktu, ama Python uygulaması kadar hızlı Haskell biri olarak yaklaşık 2x olduğu gibi kabaca hissediyor. Belki de Haskell kodunun "inanılmaz derecede yavaş" olduğunu söylememeliydim, ama Haskell statik olarak yazıldığından beri sanırım daha hızlı ve Python'dan daha yavaş olmamalıydı.
Python kodunu ve bazı karşılaştırmaları kaydedebilir misiniz? –
'kelimeler dict' sadece bir listedir ve' elem' liste boyunca sıralı bir arama gerçekleştirmektedir. – ErikR
Dizeler Haskell'deki bağlantılı listelerdir. Metin tipini kullan. –