2016-05-19 2 views
0

У меня есть 3-хместный список родовых книг, которые содержат имя, месяц, день. Я хочу добавить новые кортежи и показать родословную. Однако после того, как я добавляю или удаляю значения, родословная не меняется.
Скажите, после того, как я добавлю тома 5 6, но напечатайте родословную, просто покажите «dd» 4 5, что означает (том, 5,6) не добавляет в BirthBook. что мне делать?
здесь мои коды:Как сохранить список после добавления и удаления элементов в haskell?

birthBook::[(String,String,String)] 
birthBook=[("dd","4","5")] 

prompt :: String -> IO() 
prompt todos = do 
    putStrLn "Enter a command(add,remove,print)" 
    cmd <- getLine 
    interpret cmd todos 
interpret :: String->String-> IO() 
interpret "print"  todos= do 
    print(birthBook) 
    prompt todos 
interpret "add"  todos= do 
    putStrLn "Enter a name" 
    cmdname<-getLine 
    putStrLn "Enter an integer month" 
    cmdmonth<-getLine 
    putStrLn "Enter an integer day" 
    cmdday<-getLine 
    print(add birthBook cmdname cmdmonth cmdday) 
    prompt todos 
add::(Eq key)=>[(key,v,z)]->key->v->z->[(key,v,z)] 
add birthBook name month day = (name, month, day):birthBook 

main= prompt [] 
+0

Вы не используете 'add' в любом месте своей программы. – erisco

+0

Вы получаете '' dd "4 5' только при вводе команды' print' в вашей программе, а также при вводе команды 'add'? –

+0

Я получаю только dd 4 5, когда печатаю тип, даже если добавляю новый кортеж. Я хочу добавить новый кортеж и напечатать все. –

ответ

2

Проблема здесь состоит в том, что вы забываете Haskell является чисто функциональным и не относятся к ценностям как изменяемые по умолчанию.

Вам необходимо сдать родословную в качестве аргумента в адрес prompt и interpret, чтобы изменения не сохранились. Вы также пытались распечатать начальную декларацию birthBook, которая всегда будет оставаться такой же, как Haskell - это чисто функциональный язык программирования, и если вы хотите что-либо изменить, вам нужно сделать новую копию своих данных плюс нужные изменения, re look to make - следовательно, выражение let newBirthBook, которое я поставил в конце вашей интерпретационной процедуры.

+0

Получите это! Благодаря! –

Смежные вопросы