2012-12-02 18 views
5

Tôi có một danh sách các mã ký tự trong prolog.Prolog - Danh sách các mã vạch vào một chuỗi hoặc ký tự

Tôi muốn thay đổi chúng thành ký tự.

Ví dụ,

L = "abc" lợi nhuận L = [97,98,99]

Giả sử tôi bắt đầu với L = [97,98,99]

Có anyway để chuyển đổi L trở lại vào abc như vậy mà, nếu có tồn tại một phương pháp

convert(L, X) trả về X = abc

Cảm ơn.

Trả lời

5

Với L="abc", convert(L, X), X = abc Tôi muốn nói rằng bạn muốn nhận được nguyên tử (xem Data types description) từ chuỗi prolog. Tôi đoán bạn muốn atom_codes/2 hoặc một cái gì đó tương tự. Nó sẽ hoạt động như L="abc", atom_codes(X, L). theo tài liệu.

Hiện tại, tôi không có SWI-Prolog trong hệ thống của mình. Nhưng đây là YAP chứa atom_codes/2

YAP 6.3.2 (x86_64-linux): Sat Sep 1 08:24:15 EEST 2012 
MYDDAS version MYDDAS-0.9.1 
?- L="abc", atom_codes(X,L). 
L = [97,98,99], 
X = abc 

Đừng quên cũng là nếu bạn cần để chuỗi đầu ra bạn không cần nó để được chuyển đổi sang nguyên tử. Xem format/2 in SWI (hoặc in YAP)

?- L="abc", format("~s~n", [L]). 
abc 
L = [97,98,99] 
4

Sử dụng char_code(?Atom, ?ASCII) trong danh sách bản đồ.

char_code (? Atom,? ASCII) Chuyển đổi giữa ký tự và giá trị ASCII cho một ký tự đơn. (16)

Source

4

Nhân vật được thể hiện dưới dạng nguyên tử có độ dài 1. Bạn có thể tạo ra chúng:

  • Tại đọc thời gian bằng cách thay đổi cờ Prolog double_quotes. Để biết thêm thông tin, hãy xem liên kết thisthat.

    :- set_prolog_flag(double_quotes, chars). 
    
  • động, bạn có thể sử dụng atom_codes/2atom_chars/2. Hoặc bạn có thể sử dụng trực tiếp char_code/2.

+0

Tôi nghĩ rằng nguyên tử là một số nhận dạng trừu tượng không có thuộc tính ngoại trừ việc chúng khác nhau nếu số nhận dạng khác nhau. Việc chuyển đổi thành chuỗi và ngược lại giống như sự liên kết tìm kiếm hơn là tháo rời và lắp ráp. Cũng như một số hệ thống Prolog (ít nhất là YAP và một trong những đề cập trong câu hỏi) có thể đại diện cho chuỗi như danh sách các mã ký tự (số). Mặc dù tôi đồng ý rằng các con số có thể được coi là tập hợp con của các nguyên tử (loại trái với danh sách/cấu trúc) nhưng số nhận dạng của chúng cho các ký tự hiển thị thường dài hơn một ký tự. – ony

+0

@ony: Cũng trong YAP bạn có thể nói: 'set_prolog_flag (double_quotes, chars)' và sau đó '" abc "' là '[a, b, c]'. Nói chung, biểu diễn này dễ đọc hơn '[97, 98, 99]'. – false

+0

@see cũng [this] (http://stackoverflow.com/a/36645725/772868). – false