0
저는 하스켈을 매우 신 'm습니다. 나는 다음과 같은 방법으로 목록의 순서를 변경하려면 : 중간 번호 또는 목록의 번호를 얻고 시작 위치에 넣어하는 가정 것하스켈 - 목록의 중간 번호 받기
[5,6,7,8,9] -> [7,5,9,6,8]
[6,7,8,5,4,3] -> [8,5,6,3,7,4]
. 그 다음 목록의 두 개의 외부 번호를 가져 와서 추가하고 시작해야합니다. 중간 번호를 가져 와서 목록의 시작 부분에 넣으려면 다음 코드를 사용하지만 방법을 알 수는 없습니다. 새 목록에 외부 번호를 추가하기 시작합니다.
코드 : 고급의
-- import Data.List
-- import System.IO
longitude xs = length xs
middle xs = length xs `div` 2
addOne xs = middle xs - 1
oneMore xs = length xs - 1
otherCase xs = oneMore xs `div` 2
valuea xs = xs !! middle xs
valueb xs = xs !! addOne xs
valuec xs = xs !! otherCase xs
modulus xs = longitude xs `mod` 2
order xs = midNums xs
takes xs = take (otherCase xs) xs
oddOne xs = otherCase xs + 1
takeX xs = drop (oddOne xs) xs
value xs = takes xs ++ takeX xs
reorder xs = drop (otherCase xs)(take (middle xs + 1) xs)
valueOdd xs = reorder xs ++ takes xs ++ takeX xs
paruno xs = drop (middle xs + 1) xs
pairTwo xs = take (addOne xs) xs
midPair xs = take (addOne xs)(drop (middle xs -1) xs)
--Get the numbers
midNums xs = if modulus xs == 0 then midPair xs ++ paruno xs ++ pairTwo xs
else valueOdd xs
덕분에, 어떤 도움을 크게 감사합니다.
편집 : Demo
감사를 평평하고 가운데 요소 목록에 추가 연결할에게 우편 결과를 우편
처럼 코드를 업데이트했습니다. 'secondhalf' 함수에서 인덱싱을 조금 해보았습니다. 다시 시도하고 싶을 수도 있습니다. –