2015-03-04 4 views
1

Я создаю программу, предназначенную для того, чтобы пользователи могли подсчитывать количество букв или количество слов в строке, однако при запуске программы через cmd я получаю clojure.lang .ArityException, неверное число аргументов (1), переданных: сердечник/-main/счетчик - 5333неправильное количество аргументов clojure

Мой код

;;Create a GUI which allows user to input a string and to select "word count" or "letter count". When "Start" is clicked pass both the string and either (wordCount [string x]) or (letterCount [string x]) to 
;;declare functions as variables 
;;show function that takes functions as parameters 
;;show function that returns another function 
(ns firstclass.core 
    (:gen-class) 
    (:use seesaw.core)) 

(defn -main 
    [& args] 

(def strInput (input "Please enter a string to be evaluated")) 

(def groups (button-group)) 
(def s (selection groups)) 

(def letterRadio (radio :text "Letter" :group groups)) 
(def wordRadio (radio :text "Word" :group groups)) 

(defn letterCount 
    [string] 
    (loop [characters string 
     a-count 0] 
    (if (= (first characters) \a) 
     (recur (rest characters) (inc a-count)) 
     a-count))) 

(defn wordCount 
    [string] 
    (loop [characters string 
     a-count 0] 
    (if (= (first characters) \a) 
     (recur (rest characters) (inc a-count)) 
     a-count))) 

(def counter (fn [fn x, string strInput] (x [strInput]))) 

(defn handler [event] 
    (if-let [s letterRadio] 
     (counter [letterCount, strInput])) 
    (if-let [s wordRadio] 
     (counter [wordCount, strInput]))) 

(def start (button :text "Start Count" :listen [:action handler])) 

(def panel 
    (flow-panel :items [strInput, letterRadio, wordRadio, start])) 

(invoke-later 
    (-> (frame :content panel :on-close :dispose) 
     pack! show!))) 

ответ

2

для определения counter

(def counter (fn [fn x, string strInput] (x [strInput]))) 

у вас есть функция четырех аргументов

в функции handler, вы называете его с одним аргументом:

(counter [letterCount strInput]) 

из контекста я предполагаю, что вы имели в виду, чтобы определить счетчик как имеющий два аргумента, и вы хотели назовите его двумя аргументами, а не одним вектором из двух элементов.

(def counter (fn [x strInput] (x strInput))) 

... 

(counter letterCount strInput) 

Кроме того, лучше использовать defn для определения функции, а не deffn и отдельно

(defn counter [x strInput] (x strInput)) 

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

  • Нет связанных вопросов^_^