2010-12-30 7 views
6

Я начинаю изучать Lisp с фоном Java. В упражнении SICP там много задач, где студенты должны создать абстрактные функции со многими параметрами, какСлишком много аргументов для функции

(define (filtered-accumulate combiner null-value term a next b filter)...) 

в exercise 3.11. В Java (язык с безопасной, статической типизированной дисциплиной) - метод с более чем 4 аргументами обычно пахнет, но в Lisp/Scheme это не так, не так ли? Мне интересно, сколько аргументов вы используете в своих функциях? Если вы используете его в производстве, вы делаете столько слоев?

+1

Что случилось с методом с 4-мя более чем 4-мя аргументами? – Falmarri

+0

@Falmarri, обычно сложно иметь в виду такой API +, вы можете ошибиться в порядке аргументов. –

+1

Это не похоже на причины произвольного ограничения 4 аргументов. – Falmarri

ответ

12

SICP - это книга, используемая во вводном курсе по информатике. Хотя он объясняет некоторые продвинутые концепции, он использует очень крошечный язык, подмножество языка Схемы и под-подмножество любого реального мира Scheme или Lisp, которое обеспечивает типичная реализация.

В SICP нет, например, макросов. Добавьте, что стандартная схема имеет только позиционные параметры для функций.

В «реальном» Lisp или Scheme можно использовать один или несколько из следующих действий:

  • объектов или записи/сооружение (затворы бедняка), которые групповые вещи. Переданный объект может содержать несколько элементов данных, которые в противном случае должны были бы передаваться «spread».

  • значения по умолчанию для необязательных переменных. Таким образом, нам нужно только передать те, которые мы хотим иметь определенное значение по умолчанию

  • необязательные и именованные аргументы. Это позволяет использовать гибкие списки аргументов, которые являются более наглядными.

  • расчетные аргументы. Значение или значение по умолчанию аргументов может быть вычислено на основе других аргументов

выше приводит к более сложным для написания функциональных интерфейсов, которые часто проще в использовании.

В Lisp это хороший стиль, чтобы иметь описательные имена для аргументов, а также предоставлять онлайн-документацию для интерфейса. В среде разработки будет отображаться информация о интерфейсе функции, поэтому эта информация обычно является только нажатием клавиши или даже отображается автоматически.

Это также хороший стиль для любого нетривиального интерфейса, который должен использоваться интерактивно пользователем/разработчиком для проверки его аргументов во время выполнения.

+0

Спасибо. Я буду больше читать) –

Смежные вопросы