Я думаю, что комментарий FUZxxl абсолютно правильный.Когда я вписываю в реплик Хагса:
Hugs> fst(a,b)
ERROR - Undefined variable "b"
Hugs> snd(a,b)
ERROR - Undefined variable "b"
Это не ленивая / энергичная оценка - когда Хагс проверяет, что fst(a,b)
является действительным кодом Haskell, он замечает, что a
и b
не определены.Эти две буквы не имеют специального значения в Haskell, они переменные, как и в любом другом языке!
Это похоже на движение Java:
System.out.println(a);
И никогда не говорить, что a
является!Вместо этого вы должны написать что-то вроде:
String a = "Hello world."
System.out.println(a);
Чтобы исправить это, вы можете определить a
и b
в выражении let , например:
>let (a,b) = (1,2) in fst(a,b)
или
>let tup = (1,2) in fst tup
или
>let a=1;b=2 in fst(a,b)
или , где оператор
>fst(a,b) where a=1;b=2
и т. Д.
В качестве альтернативы, определите в каком-нибудь файле, который называется «что угодно» (например, «TestTuple.hs»)
a = 1
b = 2
и в Hugs, перейдите:
>:load TestTuple.hs
>fst(a,b)
1
Хотя вы заметили, чтоВы используете Hugs, просто для справки, в GHCi , вы также можете определить переменные в REPL следующим образом:
>let a = 1
>let b = 2
>fst(a,b)
1
>snd(a,b)
2