在Erlang中重写变量 [英] Rewrite variable in Erlang

查看:78
本文介绍了在Erlang中重写变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在玩记录和列表。请,我想知道如何使用一个变量两次。当我将任何值分配给变量_list,之后我尝试重写此变量,然后提高错误:


**异常错误:不匹配右边的值




  -module(hello)。 
-author(anx00040)。

-record(car,{evc,type,color})。
-record(person,{name,phone,addresa,rc})。
-record(driver,{rc,evc})。

-record(list,{cars = [],persons = [],drivers = []})。

%% API
-export([helloIF / 1,helloCase / 1,helloResult / 1,helloList / 0,map / 2,filter / 2,helloListCaA / 0,createCar / 3 ,createPerson / 4,createDriver / 2,helloRecords / 0,empty_list / 0,any_data / 0,del_Person / 1,get_persons / 1,do_it_hard / 0,add_person / 2])。


createCar(P_evc,P_type,P_color) - > _car = #car {evc = P_evc,type = P_type,color = P_color},_car

createPerson(P_name,P_phone,P_addres,P_rc) - > _person = #person {name = P_name,phone = P_phone,addresa = P_addres,rc = P_rc},_person

createDriver(P_evc,P_rc) - > _driver = #driver {rc = P_rc,evc = P_evc},_driver


empty_list() - >
#list {}。

any_data() - >
_car1 = hello:createCar(BL 4,Skoda octavia,White),
_person1 = hello:createPerson(Eduard B。,+ 421 917 111 711 Kr,81107 Bratislava1,8811235),
_driver1 = hello:createDriver(_car1#car.evc,_person1#person.rc),

_car2 = hello:createCar 111,BMW M1,Red),
_person2 = hello:createPerson(Lenka M,+ 421 917 111 111,Krizn0,81107 Bratislava1,8811167695),
_driver2 = hello:createDriver(_car2#car.evc,_person2#person.rc),

_car3 = hello:createCar(BL 123 AB,Audi A1 S,Black ),
_person3 = hello:createPerson(Stela Ba。,+ 421 918 111 711,Azna 20,81107 Bratislava1,8811167695),
_driver3 = hello:createDriver _car3#​​car.evc,_person3#person.rc),

_list = #list {
cars = [_car1,_car2,_car3],
persons = [_person1,_person2 ,_person3],
drivers = [_driver1,_driver2,_driver3]},
_list。


add_person(List,Person) - >
列表#list {persons =列表:append([Person],List#list.persons)}。

get_persons(#list {persons = P}) - > P.

do_it_hard() - >
empty_list(),
_list = add_person(any_data(),#person {name =Test,phone =+ 421Test,addresa =Testova 20 81101 Testovo,rc = 88113545}) ,
io:fwrite(\\\
),
get_persons(add_person(_list,#person {name =Test2,phone =+ 421Test2,addresa =Testova 20 81101 Testovo2 ,rc = 991135455}))

但是当我使用变量_list两次时会提高错误:

  do_it_hard() - > 
empty_list(),
_list = add_person(any_data(),#person {name =Test,phone =+ 421Test,addresa =Testova 20 81101 Testovo,rc = 88113545}) ,
_list = add_person(_list,#person {name =Test2,phone =+ 421Test2,addresa =Testova 20 81101 Testovo2,rc = 991135455}),
get_persons(_list)


解决方案

我使用谷歌...



Erlang是一种单一分配语言。也就是说,一旦变量被赋予了一个值,就不能给出一个不同的值。在这个意义上,它就像代数而不是像大多数传统的编程语言一样。


http://www.cis.upenn.edu/~matuszek/General/ConciseGuides/concise-erlang.html



I am playing with records and list. Please, I want to know how to use one variable twice. When I assign any values into variable _list and after that I try rewrite this variable then raising error:

** exception error: no match of right hand side value

-module(hello).
-author("anx00040").

-record(car, {evc, type, color}).
-record(person, {name, phone, addresa, rc}).
-record(driver, {rc, evc}).

-record(list, {cars = [], persons = [], drivers = []} ).

%% API
-export([helloIF/1, helloCase/1, helloResult/1, helloList/0, map/2, filter/2, helloListCaA/0, createCar/3, createPerson/4, createDriver/2, helloRecords/0, empty_list/0, any_data/0, del_Person/1, get_persons/1, do_it_hard/0, add_person/2]).


createCar(P_evc, P_type, P_color) -> _car = #car{evc = P_evc, type = P_type, color = P_color}, _car
  .
createPerson(P_name, P_phone, P_addres, P_rc) -> _person= #person{name = P_name, phone = P_phone, addresa = P_addres, rc = P_rc}, _person
  .
createDriver(P_evc, P_rc) -> _driver = #driver{rc = P_rc, evc = P_evc}, _driver
  .  

empty_list() ->
  #list{}.

any_data() ->
  _car1 = hello:createCar("BL 4", "Skoda octavia", "White"),
  _person1 = hello:createPerson("Eduard B.","+421 917 111 711","Kr, 81107 Bratislava1", "8811235"),
  _driver1 = hello:createDriver(_car1#car.evc, _person1#person.rc),

  _car2 = hello:createCar("BL 111 HK", "BMW M1", "Red"),
  _person2 = hello:createPerson("Lenka M","+421 917 111 111","Krizn0, 81107 Bratislava1", "8811167695"),
  _driver2 = hello:createDriver(_car2#car.evc, _person2#person.rc),

  _car3 = hello:createCar("BL 123 AB", "Audi A1 S", "Black"),
  _person3 = hello:createPerson("Stela Ba.","+421 918 111 711","Azna 20, 81107 Bratislava1", "8811167695"),
  _driver3 = hello:createDriver(_car3#car.evc, _person3#person.rc),

  _list = #list{
    cars = [_car1,_car2,_car3],
    persons = [_person1, _person2, _person3],
    drivers = [_driver1, _driver2, _driver3]},
  _list.


add_person(List, Person) ->
  List#list{persons = lists:append([Person], List#list.persons) }.

get_persons(#list{persons = P}) -> P.

do_it_hard()->
  empty_list(),
  _list = add_person(any_data(), #person{name = "Test",phone = "+421Test", addresa = "Testova 20 81101 Testovo", rc =88113545}),
  io:fwrite("\n"),
  get_persons(add_person(_list, #person{name = "Test2",phone = "+421Test2", addresa = "Testova 20 81101 Testovo2", rc =991135455}))
.

But it raising error when i use variable _list twice:

do_it_hard()->
  empty_list(),
  _list = add_person(any_data(), #person{name = "Test",phone = "+421Test", addresa = "Testova 20 81101 Testovo", rc =88113545}),
  _list =add_person(_list, #person{name = "Test2",phone = "+421Test2", addresa = "Testova 20 81101 Testovo2", rc =991135455}),
  get_persons(_list)
.

解决方案

I used google...

Erlang is a single-assignment language. That is, once a variable has been given a value, it cannot be given a different value. In this sense it is like algebra rather than like most conventional programming languages.

http://www.cis.upenn.edu/~matuszek/General/ConciseGuides/concise-erlang.html

这篇关于在Erlang中重写变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆