저는 haskell에서 Table 데이터 유형을 구현 했습니다만, 가장 작은 키를 반환하는 내 minkey 함수는 올바른 결과를주지 않는 것 같습니다. 난 그냥 테이블 초기화 왜 ..하스켈에서 테이블 ADT 구현하기 - 내 미니 키 기능이 작동하지 않는 이유는 무엇입니까?
module Table where
import Prelude hiding (init,read,length)
type Key = Int
type Value = String
errorvalue = "ERROR"
maxentries = 5
data Table = Empty | App(Key,Value,Table)
deriving Show
init :: Table
insert :: (Key,Value,Table) -> Table
isin :: (Key,Table) -> Bool
read :: (Key,Table) -> Value
empty :: Table -> Bool
delete :: (Key,Table) -> Table
update :: (Key,Value,Table) -> Table
length :: Table -> Int
full :: Table -> Bool
minkey::Table->Key
init = Empty
minkey(App(k,v,init))=k
minkey(App(k,v,t))= if k>minkey(t) then minkey(t) else k
insert(k,v,t) = if v == errorvalue then t
else if isin(k,t) then t
else if full(t) then t
else App(k,v,t)
isin(x,Empty) = False
isin(x,App(k,v,t)) = if x == k then True
else isin(x,t)
read(x,Empty) = errorvalue
read(x,App(k,v,t)) = if x == k then v
else read(x,t)
empty(Empty) = True
empty(App(k,v,t)) = False
delete(x,Empty) = Empty
delete(x,App(k,v,t)) = if x == k then t
else App(k,v,delete(x,t))
update(k,v,Empty) = Empty
update(k,v,App(k2,v2,t)) = if k == k2 then App(k,v,t)
else App(k2,v2,update(k,v,t))
length(Empty) = 0
length(App(k,v,t)) = 1 + length(t)
full(t) = if length(t) == maxentries then True
else False
다른 스크립트에서 궁금 : 나는 예상대로 출력이되지 1 해요 인쇄 할 때
import Table
import Prelude hiding (init,read,length)
main :: IO()
main = do
let k1 = 9
let k2 = 8
let k3 = 1
let k4 = 6
let k5 = 10
let v1 = "q"
let v2 = "a"
let v3 = "si"
let v4 = "se"
let v5 = "fu"
let i0 = init
let i1 = insert(k1,v1,i0)
let i2 = insert(k2,v2,i1)
let i3 = insert(k3,v3,i2)
let i4 = insert(k4,v4,i3)
let i5 = insert(k5,v5,i4)
let m = minkey(i5)
print m
print i5
,하지만 마지막 키는 테이블로 가져 (이 경우 10) 내가 뭘 잘못하고 있니? 어쩌면 재귀?
'minkey (App (k, v, init)) = k'에서'init '은 변수 이름으로 간주되며'Empty '가 아닙니다. 괄호를 너무 많이 사용하면 코드가 부자연 스럽습니다. 그리고 list를 사용할 수도 있습니다. – jeiea
감사합니다. 나는 정말로 그것을 알아 차리지 못했다. .. 지금 모든 것이 올바르게 작동하고있다. 나는 그것이 좋지 않다는 것을 안다. 나는 그것을 혼자서 구현하고 싶었다. 쓰기는 대답이므로 받아 들일 수 있습니다. – Teo
'-Wall' 플래그를 사용하여 GHC의 경고를 켜는 것이 좋습니다. 많은 일반적인 오류가이 오류를 포함하여보고됩니다. – chi