두 개의 인수를 취하는 함수를 작성하는 데 도움을주십시오 : int 및 인덱스 (int) 목록 및 테이블의 지정된 인덱스 위치에 음수 값이있는 정수 목록을 반환합니다.haskell 재귀 함수
이 함수의 서명은 MyReverse :: [Int]->Int->[Int]
입니다.
예 : myReverse [1,2,3,4,5] 3 = [1,2,-3,4,5]
.
색인이 목록의 길이보다 크거나 0보다 작은 경우 동일한 목록을 반환하십시오.
두 개의 인수를 취하는 함수를 작성하는 데 도움을주십시오 : int 및 인덱스 (int) 목록 및 테이블의 지정된 인덱스 위치에 음수 값이있는 정수 목록을 반환합니다.haskell 재귀 함수
이 함수의 서명은 MyReverse :: [Int]->Int->[Int]
입니다.
예 : myReverse [1,2,3,4,5] 3 = [1,2,-3,4,5]
.
색인이 목록의 길이보다 크거나 0보다 작은 경우 동일한 목록을 반환하십시오.
myReverse :: [Int] -> Int -> [Int]
myReverse [] n = []
myReverse (x:xs) n
| n < 0 = x:xs
| n == 0 = (-x):xs
| otherwise = x:(myReverse xs (n-1))
배열의 색인은 0
입니다. 예는 1
에서 색인을 생성하지만, n == 0
의 경우에는 정의되지 않습니다. 1
에서 인덱스로 가져 오는 수정 사항은 매우 분명해야합니다.
또한 대문자와 일치하지 않습니다. MyReverse
은 myReverse
과 다르며 후자 만 기능으로 유효합니다. GHCi에서
결과 : myReverse
에 대한 무의미 정의를 사용하여, 같은 일을
*Main> myReverse [10,20,30,40,50] 0
[-10,20,30,40,50]
*Main> myReverse [10,20,30,40,50] 2
[10,20,-30,40,50]
*Main> myReverse [10,20,30,40,50] 3
[10,20,30,-40,50]
*Main> myReverse [10,20,30,40,50] 5
[10,20,30,40,50]
*Main> myReverse [10,20,30,40,50] (-1)
[10,20,30,40,50]
더 많은 일반 버전 :
myGeneric :: (a -> a) -> [a] -> Int -> [a]
myGeneric f [] n = []
myGeneric f (x:xs) n
| n < 0 = x:xs
| n == 0 = (f x):xs
| otherwise = x:(myGeneric f xs (n-1))
myReverse :: [Int] -> Int -> [Int]
myReverse = myGeneric negate
덕분에 해결책이 부족했기 때문에 내 솔루션이 부족했습니다. (-x) : xs 도움을 주셔서 감사합니다. – gruber
@snorlaks : 부분적인 해결책이 있다면 사람들은 항상 질문에 게시 해 주셔서 감사하며 문제가 있다고 생각한 곳에서 시도했습니다. –
myReverse xs i =
let j = i - 1
in take j xs
++ - (xs !! j)
: drop i xs
이것은 매우 비 관용적 인 하스켈이며 매우 비효율적입니다. – MtnViewMark
Ohhh thats ttricku,하지만 흥미 롭다면, 그 예제를 나에게 설명해 주시겠습니까? 도움을 주셔서 감사합니다 – gruber
let j = i -1은 변경해야 할 요소 바로 앞에있는 요소에 대한 색인을 제공합니다. take j xs 전에 요소 목록을 제공합니다 "++"는 목록 연결입니다 "!!" 인덱스가 ":"음수 값을 머리글에 놓습니다. i xs drop i xs는 첫 번째 요소가 제거 된 xs 목록입니다. 그래서 목록을 이전 부분으로 나눕니다. 부정 된 부분과 모든 부분을 모두 뒤쪽으로 붙입니다. – stonemetal
이 숙제 같은 냄새가 난다. 그렇다면 태그를 붙이십시오. –
"reverse"는리스트에서 완전히 다른 연산을 의미하므로'itemInverse' (또는'inverseItem')가 더 나은 이름이 될 것입니다. – outis
또는'negateItem'. 반전은 1/x을 의미 할 수 있습니다. – kennytm