할당은 트리를 미러링하는 것입니다 (모든 레벨에서 가장 왼쪽의 자식이 가장 오른쪽이됩니다).트리 미러링
데이터 구조 :
import Data.List
data Rose a = Node a [Rose a]
deriving (Eq, Show)
지금까지 올 것을 :
mirror :: Rose a -> Rose a
mirror (Node x []) = Node x []
mirror (Node x (y:ys)) = mirror (myReverse y)
--reverses given node children
myReverse :: Rose a -> Rose a
myReverse (Node x y) = Node x (reverse y)
을 그래서 예를 들어이 코드를 실행하면
Main> mirror (Node 1 [Node 11 [Node 111 [], Node 112[]], Node 12 [Node 121[]]])
을 함수는 나를반환은 왼쪽 잎에 붙어있는 것을 의미합니다. 내 코드로 판단하면 논리적 인 것 같습니다. 주어진 노드의 꼬리를 y:ys
에 전달하지 않기 때문입니다. 어떻게 든 주어진 노드 과의 첫 번째 자식의 모든 자식을 동일한 함수에 대해 꼬리를 전달할 수 있어야합니다. 아무리 노력해도 나는 이것을 달성 할 수 없으며 논리적 사고의 한계에 부딪힌 것 같습니다. 올바르게 지적
Documentation for reverse function
내장 된'map' 함수를 사용하여 주셔서 감사합니다. 또한, 나는 $ 표시가 괄호를 의미하는 것이 맞습니까? $ 기호가 없으면 스포일러 결과는'mirror (Node a children) = Node a (reverse (map mirror children))'가 될 것입니다. –
@SYLARRR : 예,'$ '연산자의 우선 순위가 매우 낮으므로 대개 가능한 한 오른쪽으로 확장되는 큰 왼쪽 괄호처럼 생각할 수 있습니다. – hammar
어,이 사이트에서 누군가가 스포일러를 사용하는 것을 본 적이 있습니다. 잘 했어. –