나는이 작업을 uni에두고 오랜 시간 동안 연구했지만,이 함수를 작성하는 방법을 찾을 수 없다. . 리스트가 회문인지 확인하고, 대부분의 플로어 (n/2) 시간에 재귀 적으로 호출하고 보조 목록을 할당하지 않아야합니다. 그래서 목록 생성자를 사용할 수 없습니다. 아이디어가 있으십니까? Tbh, 전체 솔루션보다 알고리즘을 원합니다. 목록의 나머지 부분과의 처음부터 멀리 두 배 목록의 나머지 :OCaml 함수가 list (n/2) 재귀 호출과리스트 할당이없는 palindrome인지 확인한다.
0
A
답변
2
나는이 마련하고 그것을 작동 :
let palindrom l =
let rec aux l0 l1 =
match (l0, l1) with
| _,[] -> (true,[])
| hd :: tl, [x] -> (hd = x, tl)
| _, hd1 :: tl1 -> let (pal, ll) = aux l0 tl1 in
match ll with
| [] -> (pal, [])
| hd::tl -> (pal && hd1 = hd, tl) in
match l with
[] -> true
| _ -> fst (aux l l)
0
당신은 2 개 개의 인수를 취하는의 길에
- 하는 재귀 도우미 기능을 사용할 수 있습니다 확인할 목록.
- 은 점검 할 목록의 중간에 기본 케이스에 도달합니다 (두 번째 목록이 비어 있거나 홀수 길이의 경우 단일 요소 만있는 경우)
- 출구에 목록을
option
은 여전히 보유하고 나머지는 어떤지 역에서 확인할 수 방법 - 또는None
회문이 이
예 일치에 실패하는 경우 :
// in
hannah hannah
annah nnah
nnah ah
nah
// out
n <-> nah
a <-> ah
h <-> h
[도움말/on-topic] : * 3을 참조하십시오. 숙제 도움을 요청하는 질문에는 문제를 해결하기 위해 지금까지 해 온 작업의 요약과 문제 해결에 대한 설명이 포함되어야합니다. * "나는 오랫동안 연구했다"는 것만으로는 충분하지 않습니다. – glennsl
예상되는 솔루션인지 확실하지 않지만 계속해서 확실하게 해결할 수 있습니다. (그것은 기본적으로 명시 적 단점을 사용하지 않고 링크 된 목록을 할당하고 있습니다) – Bergi
'length'를 사용할 수 있습니까? – Bergi