Karmaşık bir dizesinden listesini döndürür

oy
-2

Ben Haskell ile başlar.

Böyle farklı elementin türde bir listeye bir dize dönüştürebilirsiniz merak ediyordum: 1*30%4 -> ['1', '*', '30', '%', '4']Parsec olmadan

Zaten cevapları bulduk ama hiçbiri gerçekten gibi ... bana yardım map (:[]) 1*30%4GHCi ile veya yardımı ile intersperse.

ama her şeyin tek tek kesilir çünkü, örneğin, listemde çift sayılar veya şamandıra / olamaz, doğru biçimlerini tutmak nasıl bilmiyorum: 1*30%4 -> ['1', '*', '3', '0', '%', '4']ya1*30.4%4 -> ['1', '*', '3', '0', '.', '4', '%', '4']

Birisi bana yardımcı olabilir?

Oluştur 08/11/2018 saat 11:29
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
3

Bazı kullanıcılar belirttiğimiz gibi, dönen türüdür [String]yerine [Char]. Kolayca takip ederek bunu başarabilirsiniz:

import Data.Char
import Data.List

expresionToList :: String -> [String]
expresionToList = groupBy readAsNumber
  where readAsNumber c d = pred c && pred d
        pred x = isDigit x || x == '.'
  • pred onun giriş bir rakam veya bir nokta olduğunda işlev Yanlış aksi True döndürür

  • readAsNumber Her iki rakam veya bir nokta ise iki döner Gerçek alır

  • Sonunda gruplandırma dize tarafından readAsNumber
Cevap 08/11/2018 saat 12:47
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more