[Haskell] Чем заменить цикл
От: slava_phirsov Россия  
Дата: 09.04.10 11:42
Оценка:
Доброго времени суток всем читающим!

В книге Haskell school of expression нашел такое упражнение:

Define a function regularPolygon::Int->Side->Shape such that regularPolygon n s is a regular polygon with n sides, each of length s.


Предполагается, что функция в своей работе создает список вершин [(Float, Float)].

В императивных языках это делается циклом, например:
import math
from math import pi, cos, sin

def regularPolygon(s, n):
  vertices = [(0, 0)]
  angle = 2 * pi / n
  for i in range(n):
    vertices.append((vertices[-1][0] + s * cos(angle * i), vertices[-1][1] + s * sin(angle * i)))
  return vertices

Как это можно реализовать при помощи только рекурсии, let, where и тригонометрических функций (пример приведен в самом начале книги, и у новичка в Haskell кроме этих инструментов ничего нет)?
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.